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

我想在我定义的函数中传递并使用数据帧。但是我失败了。我想知道如何在R中传递和使用数据框。

我使用的代码如下:


# create example data

testData <- data.frame(man = c(9,8,3,4,8),woman = c(5,7,1,1),love = c(1,2,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)

但是我收到了此错误消息-Error in eval(predvars,data,env) : object 'love' not found。有人知道如何解决这个问题吗?

squirrel917878 回答:如何传递和使用数据框到函数

尝试以下方法:

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))
}

然后您可以根据需要使用它:

polynomial(iv1 = man,iv2 = woman,dv = love,dataset = testData)

substitute会将名称dviv1iv2替换为您在函数调用中提供的参数名称(在您的情况下为{{1} },manwoman)。确实,如果在函数中打印对象公式的值,您将得到love。您还可以咨询相关的stackoverlock questionarticle of H. Wickham,以更好地了解其工作原理。

,

您必须替换lm调用中的变量(请参见下面的多项式函数)

当您提供变量时,它必须是一个字符串,其他替代功能将无法使用。.

    polynomial <- function(iv1,dataset){

    SUB=list(dv = as.name(dv),iv1=as.name(iv1),iv2=as.name(iv2))
    FORMULA = as.formula(substitute(dv ~ iv1 + iv2 + I(iv1^2) + I(iv1 * iv2) + I(iv2^2),SUB))
    model = lm(FORMULA,data=testData)
      return(summary(model))
    }

# use the function

polynomial(iv1 = "man",iv2 = "woman",dv = "love",dataset = testData)
,

该函数尝试在R全局环境中查找名为love的文字对象,而不是在数据框中搜索名称为love的列。我建议您阅读此答案以使用deparse(substitute())做您想做的事情:

https://stackoverflow.com/a/36015931/11316205

本文链接:https://www.f2er.com/3125565.html

大家都在问