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

在R中使用线性回归创建新函数:,r,regression,linear-regression,lm,R,Regression,Linear Regression,Lm,创建调用lm()函数的函数时遇到问题: regresionLineal <- function (vardep, varindep1, varindep2, DATA) { lm(vardep ~ varindep1 + varindep2, data = DATA) } eval(expr、envir、enclose)中出错:找不到对象“Estatura” 调用自:eval(expr、envir、enclose) 欢迎提供任何帮助…您应该: regresionLineal &l

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

regresionLineal <- function (vardep, varindep1, varindep2, DATA) {
  lm(vardep ~ varindep1 + varindep2, data = DATA)
  }
eval(expr、envir、enclose)中出错:找不到对象“Estatura” 调用自:eval(expr、envir、enclose)

欢迎提供任何帮助…

您应该:

regresionLineal <- function (vardep, varindep1, varindep2, DATA) {
  lm(paste(vardep, "~", varindep1, "+", varindep2), data = DATA)
  }
然而,我不明白我们为什么要这么做。如果我们必须指定公式中的每个变量,为什么不简单地传递一个完整的公式呢?在这种情况下,您可以直接使用
lm()
,而无需定义自己的函数。

您应该执行以下操作:

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

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

此外,您可能已经知道这一点,但请记住,此处创建的回归对象不会存在于函数之外,除非指定给全局环境或您正在使用的任何环境。如果你需要打电话给注册。对象位于此函数之外。出于某种原因,您应该将其指定为:
model1此外,您可能已经知道这一点,但请记住,此处创建的回归对象不会存在于函数之外,除非指定给全局环境或您正在使用的任何环境。如果你需要打电话给注册。对象超出此函数的范围。出于某种原因,应将其指定为:
model1如果要创建具有任意数量自变量的模型,可以使用以下方法:


create_lm如果要创建具有任意数量自变量的模型,可以使用以下方法:


create_lm我想我会为未来的读者添加这篇文章

我提出的解决方案(并不完美)是以下函数:

regresionLineal <- function (vardep, varindep1, varindep2, DATA) {
  lm(vardep ~ varindep1 + varindep2, data = DATA)
  }
f(“mpg”、“hp”、“wt”、mtcars)
电话:
lm(公式=mpg~hp+wt,数据=mtcars)
系数:
(截距)hp wt
37.2273      -0.0318      -3.8778
与其他方法相比的主要优点是,
lm
的输出不会混淆变量名称或数据帧

也许未来的读者可以理解,运行此命令需要了解R基函数:
parse
deparse1
substitute
eval


谢谢

我只是想为未来的读者补充一下

我提出的解决方案(并不完美)是以下函数:

regresionLineal <- function (vardep, varindep1, varindep2, DATA) {
  lm(vardep ~ varindep1 + varindep2, data = DATA)
  }
f(“mpg”、“hp”、“wt”、mtcars)
电话:
lm(公式=mpg~hp+wt,数据=mtcars)
系数:
(截距)hp wt
37.2273      -0.0318      -3.8778
与其他方法相比的主要优点是,
lm
的输出不会混淆变量名称或数据帧

也许未来的读者可以理解,运行此命令需要了解R基函数:
parse
deparse1
substitute
eval


谢谢

由于formula接口使用不带引号的名称,因此需要将其作为名称传递,坦率地说,这很复杂。(现在R认为您正在尝试传递[column]名称所指的对象,而这些对象实际上并不存在于data.frame之外。)实际上,将整个公式作为参数传递更容易。因为公式接口使用不带引号的名称,所以您需要将其作为参数传递,坦率地说,这很复杂。(现在R认为您正在尝试传递[column]名称所指的对象,而这些对象实际上并不存在于data.frame之外。)实际上,将整个公式作为参数传递更容易。非常感谢,好吧,我不想说,我还必须对我的公式调用另一个函数,这就是我这么做的原因。无论如何,lm是比较难的一个。非常感谢,好吧,我不想说,我还必须在我的公式中调用另一个函数,这就是我为什么这么做的原因。总之,lm是比较难的一个。有,请看我的答案。有,请看我的答案。