векторизация в функциях с некоторыми таблицами в качестве параметров - PullRequest
0 голосов
/ 12 марта 2019

Мне нужна помощь по поводу лучших практик

У меня есть функция fc_mean_wages () , которая вычисляет значение (средняя заработная плата) и выполняет следующие задачи (грубо):

  1. получить в качестве параметров месячную заработную плату работника (длина м или меньше)
  2. Если у меня нет м заработной платы, я ищу способполучить аналогичную замену: 2a.получить медиану других работников от того же работодателя, 2b.в противном случае я получаю среднее значение по стране для деятельности
  3. и получаю таблицу m индексов для корректировки заработной платы с учетом инфляции.
  4. Я вычисляю средневзвешенное значение m выбранные значения

Я должен выполнить эту задачу с тысячами рабочих.Так что я могу сделать две вещи

  1. A.положить в качестве параметров полные базы данных заработной платы, вычислить их все с помощью ОДНОГО вызова функции.
  2. B.в качестве параметров укажите заработную плату только одного работника, вычислите все ее векторизованным способом (например: wages %>% group_by (worker) %>% mutate(., index_tables, wages, activity_means_table))

Я выбираю A, потому что функция должна рассчитать медиану той же базы данных заработной платы и выполнитьне знаю, хорошо ли работает векторизация, когда нужно вводить в качестве входных данных большие таблицы.Мое Решение - это не отличная функция, это скорее процесс, выполняемый одним выстрелом, чем функциональная форма.

OK Можно ли попытаться векторизовать эту задачу?¿Хотите ли вы повысить производительность, многократно вызывать таблицу заработной платы и фильтровать ее по работникам?

1 Ответ

0 голосов
/ 15 марта 2019

Очевидно, это очень сложная задача для функции.

Я рекомендую вам разделить его на более простые части.

Несмотря на это, вы не сможете избежать чтения целых таблиц для выполнения поиска, о котором вы упомянули (ищите СМИ в платежной ведомости работодателя). Решение состоит в том, чтобы проанализировать, какие из этих задач являются нестабильными, а какие нет.

Например, заработная плата работодателя может меняться раз в месяц. Затем запустите процесс поиска только один раз; это не обязательно быть функцией. Другие, такие как фильтрация заработной платы выбранного работника, могут понадобиться по требованию, поэтому функционализируйте их.

Наконец, используйте пакеты profvis и microbenchmark для записи улучшений и документирования сложных процессов. Отделите один выстрел запущенных процессов от ядра; впоследствии его можно заменить другим языком, делегировать ИТ-команде или устареть из-за улучшенного дизайна базы данных или из-за более высокого качества данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...