在 R 中使用线性回归创建新函数:

Nic*_* A. 1 regression r linear-regression lm

创建调用该lm()函数的函数时遇到问题:

regresionLineal <- function (vardep, varindep1, varindep2, DATA) {
  lm(vardep ~ varindep1 + varindep2, data = DATA)
  }
Run Code Online (Sandbox Code Playgroud)

然后我使用我之前创建的数据帧中的数据调用它(DATOS)...

regresionLineal(Estatura, Largo, Ancho, DATOS)
Run Code Online (Sandbox Code Playgroud)

eval(expr,envir, enclos) 中的错误:找不到对象 'Estatura' 调用自:eval(expr,envir, enclos)

欢迎任何帮助...

李哲源*_*李哲源 7

你应该做:

regresionLineal <- function (vardep, varindep1, varindep2, DATA) {
  lm(paste(vardep, "~", varindep1, "+", varindep2), data = DATA)
  }
Run Code Online (Sandbox Code Playgroud)

您将vardep, varindep1,varindep2作为字符串传入的位置。例如,我使用 R 的内置trees数据集:

regresionLineal("Height", "Girth", "Volumn", trees)
# Call:
# lm(formula = paste(vardep, "~", varindep1, "+", varindep2), data = DATA)

# Coefficients:
# (Intercept)        Girth       Volume  
#     83.2958      -1.8615       0.5756  
Run Code Online (Sandbox Code Playgroud)

但是,我不明白我们为什么要这样做。如果我们必须指定公式中的每个变量,为什么不简单地传入一个完整的公式呢?在这种情况下,您可以lm()直接使用而无需定义自己的函数。