2017-09-24 6 views
1

Le paquet Rmice est livré avec exemple suivant:Exécution de souris avec une formule comme variable: évaluation instantanée au lieu d'une évaluation ultérieure?

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

Je veux un appel flexible de with() comme:

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

Mais cela jette Error in eval(predvars, data, env) : object 'bmi' not found. J'ai cherché des problèmes similaires. Le problème de placard que j'ai trouvé était Help understand the error in a function I defined in R. Mon impression est, que l'écriture exp=lm(model_formula) l'expression lm(model_formula) est évaluée immédiatement, mais lors de l'écriture exp = lm(bmi~hyp+chl) il n'est pas évalué tout de suite - au lieu de la eavuation aura lieu dans la fonction with.mice()? Et si oui, comment puis-je empêcher une évaluation instantanée?

+1

Je pense que cela est probablement un problème de cadrage, plutôt que le temps de l'évaluation, en raison de comment with.mids est écrit. Comme alternative, vous pouvez définir la formule comme une chaîne, 'model_formula <-" bmi ~ hyp + chl "', puis définir la formule dans la portée with.mids 'avec (imp, lm (formule (model_formula))) ' – user20650

Répondre

0

Le commentaire de @ user20650 était l'indice de la solution. Il est nécessaire de changer la formule d'abord à un caractère, qui sera réalisé par format, et fait alors une formule encore:

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

Vous savez ce qui s'aligne sur votre flux de travail, mais il semble que ce soit sous-optimal de définir votre modèle en tant que formule, de le convertir en un caractère, puis de revenir à une formule. ps certaines réponses [ici] (https://stackoverflow.com/questions/14671172/how-to-convert-r-formula-to-text) montrent un problème avec l'utilisation de 'format' de cette façon. – user20650