在函数内的 lm 公式中动态传递变量名称

Art*_*rra 1 r lm

我有一个需要两个参数的函数:

  • dataRead(来自用户的数据帧)
  • variableChosen(用户想要在模型中使用哪个因变量)

Obs:独立变量始终是第一列

但是,如果用户给我一个名为 dataGiven 的数据框,其中列名称为:“剂量”、“重量”,我希望我的模型名称在结果中包含这些名称

我的实际函数正确地生成了 lm,但是数据框中的公式名称消失了(并显示了我如何从函数中获取数据)

    Results_REG<- function (dataRead, variableChosen){

      fit1 <- lm(formula = dataRead[,1]~dataRead[,variableChosen])

      return(fit1)
      }
Run Code Online (Sandbox Code Playgroud)

当我打电话时:

    test1 <- Results_REG(dataGive, "Weight")
    names(teste1$model)
Run Code Online (Sandbox Code Playgroud)

显示:

    "dataRead[, 1]"            "dataRead[, variableChosen]"
Run Code Online (Sandbox Code Playgroud)

我想显示我的数据框列名称,例如:

    "Doses"            "Weight"
Run Code Online (Sandbox Code Playgroud)

Mau*_*ers 10

首先,如果没有可重现的代码示例,总是很难提供帮助。对于未来的帖子,我建议您熟悉如何提供这样一个最小的可重复示例。

我不完全清楚你在问什么,所以我认为这是关于如何创建一个适合基于data单个用户选择的预测器的简单线性模型的函​​数var。

这是一个基于的示例mtcars

results_LM <- function(data, var) {
    lm(data[, 1] ~ data[, var])
}

results_LM(mtcars, "disp")
#Call:
#lm(formula = data[, 1] ~ data[, var])
#
#Coefficients:
#(Intercept)  data[, var]
#   29.59985     -0.04122
Run Code Online (Sandbox Code Playgroud)

您可以确认这给出了与以下相同的结果

lm(mpg ~ disp, data = mtcars)
Run Code Online (Sandbox Code Playgroud)

或者您可能会问如何传递预测变量的列名称?在这种情况下,我们可以用来构造一个与中的参数as.formula一起使用的公式。datalm

results_LM <- function(data, var) {
    fm <- as.formula(paste(colnames(data)[1], "~", var))
    lm(fm, data = data)
}

fit <- results_LM(mtcars, "disp")
fit
#Call:
#lm(formula = fm, data = data)
#
#Coefficients:
#(Intercept)         disp
#   29.59985     -0.04122

names(fit$model)
#[1] "mpg"  "disp"
Run Code Online (Sandbox Code Playgroud)