如何传递和使用数据框到函数

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。有谁知道如何解决这个问题?

Eti*_*ler 5

尝试以下方法:

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将更换名称dviv1iv2随着参数的名字,你在你的函数调用提供(在你的情况manwomanlove)。确实,如果在函数中打印对象公式的值,则将得到love ~ man + woman + I(man^2) + I(man * woman) + I(woman^2)。您也可以参考相关的stackoverlock问题H. Wickham文章,以更好地了解其工作原理。