Запуск мышей с формулой в качестве переменной: мгновенная оценка вместо последующей оценки?

Пакет R mice содержит следующий пример:

library("mice")
imp <- mice(nhanes)
fit <- with(data=imp,exp=lm(bmi~hyp+chl))

Мне нужен гибкий вызов with(), например:

model_formula <- bmi~hyp+chl
fit <- with(data=imp,exp=lm(model_formula))

Но это выкидывает Error in eval(predvars, data, env) : object 'bmi' not found. Искал похожие проблемы. Я обнаружил проблему со шкафом Помогите понять ошибку в функции, которую я определил в R. У меня сложилось впечатление, что при записи exp=lm(model_formula) выражение lm(model_formula) вычисляется мгновенно, но при записи exp = lm(bmi~hyp+chl) оно вычисляется не сразу - вместо этого определение будет происходить в функции with.mice()? И если да, то как я могу предотвратить мгновенную оценку?


person Qaswed    schedule 24.09.2017    source источник
comment
Я думаю, что это скорее проблема области видимости, чем время оценки, из-за того, как написано with.mids. В качестве альтернативы вы можете определить формулу как строку model_formula <- "bmi~hyp+chl", а затем определить формулу в области with.mids with(imp, lm(formula(model_formula)))   -  person user20650    schedule 24.09.2017


Ответы (1)


Комментарий @ user20650 был ключом к решению. Сначала необходимо изменить формулу на символ, что будет достигнуто с помощью format, а затем снова сделать формулу:

model_formula <- bmi~hyp+chl
fit <- with(data=imp,exp=lm(formula(format(model_formula))))
person Qaswed    schedule 24.09.2017
comment
Вы знаете, что согласуется с вашим рабочим процессом, но действительно кажется неоптимальным определять вашу модель как формулу, преобразовывать ее в символ, а затем обратно в формулу. ps некоторые ответы здесь показывают проблему с использованием format таким образом. - person user20650; 25.09.2017
comment
формула (формат (...))) выдает следующее предупреждение: Использование формулы (x) не рекомендуется, если x является вектором символов длины ›1. Рассмотрим вместо нее формулу (paste (x, collapse =)). Это сработало, но оно очень многословно: формула (paste (format (model_formula), collapse = ''))) - person Samuel Saari; 26.04.2021