wh4*_*41e 1 r function dataframe
我想在我定义的函数中传递和使用数据框。但是我失败了。我想知道如何在R中传递和使用数据帧。
我使用的代码如下:
# 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)
Run Code Online (Sandbox Code Playgroud)
但是我收到了此错误消息- Error in eval(predvars, data, env) : object 'love' not found。有谁知道如何解决这个问题?
尝试以下方法:
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))
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据需要使用它:
polynomial(iv1 = man,
iv2 = woman,
dv = love,
dataset = testData)
Run Code Online (Sandbox Code Playgroud)
substitute将更换名称dv,iv1,iv2随着参数的名字,你在你的函数调用提供(在你的情况man,woman,love)。确实,如果在函数中打印对象公式的值,则将得到love ~ man + woman + I(man^2) + I(man * woman) + I(woman^2)。您也可以参考相关的stackoverlock问题或H. Wickham的文章,以更好地了解其工作原理。