Сокращение длины вызовов функций в R - revoScaleR rxGLM () - PullRequest
0 голосов
/ 16 декабря 2018

Я использую R для создания некоторых моделей GLM на большом наборе данных в данный момент.Из-за своего размера я использую функцию rxGlm () в пакете revoScaleR - она ​​работает намного быстрее, чем базовая функция glm ().

Я сохраняю все вызовы функций в скрипте Rчтобы потом можно было воспроизвести мою работу - контрольный журнал и т. д.

Мои вызовы функций очень длинные, потому что у меня много факторов (~ 50).Все они выглядят примерно так:

rxGlm_C <- rxGlm(Dependent.Variable ~
               1 +
               Factor 1 +
               Factor 2 +
               Factor 3 +
                     ...........
               Factor N,
             family = tweedie(var.power = 1.5, link.power = 0),
             data = myDataFrame,
             pweights = "Weight.Variable",
)

Если впоследствии я захочу повторить подбор модели, но, возможно, с небольшим изменением формулы - как правило, удаляя один фактор за раз - есть лисокращенная запись для этого?На данный момент я копирую и вставляю вызов функции в файл скрипта и вручную удаляю отдельные строки.Вместо этого есть какой-то синтаксис, который говорит:

"пожалуйста, установите тот же GLM, что и в прошлый раз, но удалите фактор 13"?

Это сделало бы мои файлы сценариев намного короче.У меня сейчас около 3000 строк кода, и я еще не закончил!

Спасибо.Alan

1 Ответ

0 голосов
/ 16 декабря 2018

Есть два случая.Если вы используете все переменные из myDataFrame, то вы можете просто написать

rxGlm(Dependent.Variable ~ .,
      family = tweedie(var.power = 1.5, link.power = 0),
      data = myDataFrame, pweights = "Weight.Variable")

для полной модели и затем, скажем,

rxGlm(Dependent.Variable ~ . - Factor13,
      family = tweedie(var.power = 1.5, link.power = 0),
      data = myDataFrame, pweights = "Weight.Variable")

, чтобы сбросить Factor13.

Если вы не используете все переменные, вы можете сохранить полную формулу, скажем,

frml <- y ~ Factor1 + Factor2 + Facto3

, а затем использовать update:

update(frml, ~ . - Factor3)
# y ~ Factor1 + Factor2

Обратите внимание, что в данном случае . означает «ту же правую часть, что и в frml», а не «все переменные», как в первом варианте.

Кроме того, если это последнийопцию, вы можете облегчить построение полной формулы с paste и formula.

...