R 以公式作为变量运行鼠标:即时评估而不是后期评估?

R 以公式作为变量运行鼠标:即时评估而不是后期评估?,r,evaluation,r-mice,R,Evaluation,R Mice,Rpackagemice附带以下示例: library("mice") imp <- mice(nhanes) fit <- with(data=imp,exp=lm(bmi~hyp+chl)) 但这会在eval(predvars、data、env)中引发错误:未找到对象“bmi”。我寻找类似的问题。我发现的壁橱问题是。 我的印象是,编写exp=lm(model\u formula)表达式lm(model\u formula)会立即求值,但在编写exp=lm(bmi~hyp+chl

R
package
mice
附带以下示例:

library("mice")
imp <- mice(nhanes)
fit <- with(data=imp,exp=lm(bmi~hyp+chl))
但这会在eval(predvars、data、env)中引发
错误:未找到对象“bmi”
。我寻找类似的问题。我发现的壁橱问题是。
我的印象是,编写
exp=lm(model\u formula)
表达式
lm(model\u formula)
会立即求值,但在编写
exp=lm(bmi~hyp+chl)
时,不会立即求值,而是在函数
中使用.mice()进行求值?如果是这样的话,我如何防止即时评估?

由@user20650发表的评论是解决方案的线索。首先需要将公式更改为一个字符,这将通过
格式
实现,然后将其重新设置为公式:

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

model_公式我认为这可能是一个范围问题,而不是评估时间问题,因为with.mids是如何编写的。作为替代方案,您可以将公式定义为字符串,
model\u公式您知道什么与您的工作流相一致,但将模型定义为公式、将其转换为字符,然后返回公式似乎并不理想。ps一些答案显示了以这种方式使用
格式的问题。公式(格式(…))产生以下警告:当x是长度>1的字符向量时,不推荐使用公式(x)。考虑公式(粘贴(x,塌陷=))。这确实起到了作用,但它非常冗长:公式(粘贴(格式(model_公式),折叠=“”))
model_formula <- bmi~hyp+chl
fit <- with(data=imp,exp=lm(formula(format(model_formula))))