Сокращение длины вызовов функций в R - revoScaleR rxGLM()
Я использую 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 строк кода, и я еще не закончил!
Благодарю. Алан
1 ответ
Есть два случая. Если вы используете все переменные из 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
,