J'effectue une régression en utilisant ceci donne une erreur. Y a-t-il un moyen de passer une chaîne et d'avoir qui étant les variables utilisées sur le côté droit de la formule? P> P> data.table code>. Cependant, je voudrais spécifier de manière dynamique le côté droit de la formule comme dans l'exemple suivant:
3 Réponses :
Vous pouvez utiliser reformuler code> pour créer un objet de formule.
do.regr <- function(dt, varname, rhs){
lmtest::coeftest(x = lm(reformulate(rhs, varname), data = dt))
}
do.regr(dt, varname, c('b', 'c'))
Merci! J'ai mis à jour la question à généraliser la situation un peu plus - fait reformuler code> travaille toujours?
Cela ne fonctionne pas comme si vous souhaitez appliquer ceci par groupe. Peut-être essayez peut-être l'approche de Roland ou je pouvais penser à la division par d code> et d'appliquer reformuler sur chaque liste.
Vous pouvez calculer sur la langue:
do.regr <- function(rhs) { rhs <- parse(text = rhs)[[1]] varname <- as.symbol(varname) eval(bquote(dt[, lmtest::coeftest(x = lm(.(varname) ~ .(rhs)), vcov. = sandwich::NeweyWest(x = lm(.(varname) ~ .(rhs))) ), by = "d"])) } do.regr("b+c") #works
L'OP a demandé à passer le côté droit comme paramètre sur la fonction Par conséquent, je suggère de passer à la fois le côté gauche et le côté droit en tant que paramètres sur la fonction La fonction d'aide La fonction peut être appelée comme p> ou P > et renvoie le même résultat que p> xxx pré> do.reg () code> mais a spécifié le côté gauche de la gauche de manière dynamique dans une variable
varname code>.
do.reg () code>. p> L'approche ci-dessous reprend suggestion de Roland à calculer sur la langue em> mais utilise
Colle :: colle () code> pour une interpolation de chaîne et une fonction d'aide
eval () code> que je trouve plus lisible, iMho: p>
eval () code> a été suggéré par Matt Dowle afin de créer une expression à être évalué, "similaire à la construction d'une instruction SQL dynamique à envoyer à un serveur". p>
d V1
1: one 5.000000e-01
2: one 5.000000e-01
3: one 1.046778e-16
4: one 2.738990e-17
5: one 4.776564e+15
6: one 1.825490e+16
7: one 2.023596e-47
8: one 3.625202e-49
9: two 5.000000e-01
10: two 5.000000e-01
11: two 3.289712e-16
12: two 2.416974e-17
13: two 1.519890e+15
14: two 2.068702e+16
15: two 6.281080e-46
16: two 2.491017e-49