Je veux passer et utiliser un bloc de données dans une fonction que j'ai définie. Mais j'ai échoué. Je voudrais savoir comment passer et utiliser un bloc de données dans R.
Le code que j'ai utilisé est le suivant:
# create example data
testData <- data.frame(man = c(9, 8, 3, 4, 8),
woman = c(5, 4, 7, 1, 1),
love = c(1, 2, 3, 4, 5))
# define the function
polynomial <- function(iv1, iv2, dv, dataset){
model <- lm(dv ~ iv1 + iv2 + I(iv1^2) + I(iv1 * iv2) + I(iv2^2), data = dataset)
return(summary(model))
}
# use the function
polynomial(iv1 = man,
iv2 = woman,
dv = love,
dataset = testData)
Mais j'ai eu ce message d'erreur - Erreur dans eval (predvars, data, env): objet 'love' introuvable . Quelqu'un sait-il comment résoudre ce problème?
3 Réponses :
La fonction essaie de trouver un objet littéral nommé love dans l'environnement global R, et non de rechercher dans le bloc de données une colonne avec le nom love . Je vous recommande de lire cette réponse pour faire ce que vous voulez en utilisant deparse (substitute ()) :
Vous devez remplacer les variables à l'intérieur de l'appel lm (voir la fonction polynomiale ci-dessous)
Et lorsque vous fournissez les variables, il doit s'agir d'une chaîne, sinon la fonction de substitution ne fonctionnera pas ..
< pré> XXXEssayez ce qui suit:
polynomial(iv1 = man,
iv2 = woman,
dv = love,
dataset = testData)
Vous pouvez ensuite l'utiliser comme vous le souhaitez:
polynomial <- function(iv1, iv2, dv, dataset){
formula <- substitute(dv ~ iv1 + iv2 + I(iv1^2) + I(iv1 * iv2) + I(iv2^2))
model <- lm(formula = formula, data = dataset)
return(summary(model))
}
substitut remplacera les noms dv , iv1 , iv2 par les noms des arguments que vous fournissez dans votre appel de fonction (dans votre cas homme , femme , amour ). En effet, si vous imprimez la valeur de la formule objet dans votre fonction vous obtiendrez amour ~ homme + femme + I (homme ^ 2) + I (homme * femme) + I (femme ^ 2) . Vous pouvez également consulter une question stackoverlock ou la article de H. Wickham pour mieux comprendre comment ça marche.
Génial ! si cette réponse a résolu votre problème, veuillez la marquer comme acceptée en cliquant sur la coche à côté de la réponse. voir: Comment l'acceptation d'une réponse fonctionne? pour plus d'informations
J'ai une autre question , pourriez-vous s'il vous plaît aidez-moi encore?