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

Pass dynamically variable names in lm formula inside a function

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

Obs:独立变量永远是第一列

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

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

    Results_REG<- function (dataRead, variableChosen){

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

      return(fit1)
      }

当我打电话时:

    test1 <- Results_REG(dataGive, "Weight")
    names(teste1$model)

显示:

    "dataRead[, 1]"            "dataRead[, variableChosen]"

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

    "Doses"            "Weight"

首先,没有 reproducible code example 总是很难提供帮助。对于以后的帖子,我建议您熟悉如何提供这样一个最小的可重现示例。

我不是很清楚你在问什么,所以我假设这是关于如何创建一个函数来拟合基于 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

您可以确认这给出了与

相同的结果
lm(mpg ~ disp, data = mtcars)

或者您可能会问如何为预测变量传递列名?在这种情况下,我们可以使用 as.formula 构造一个公式,我们在 lm.

中与 data 参数一起使用
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"
outcome <- 'mpg'
model <- lm(mtcars[,outcome] ~ . ,mtcars) 

产生与以下相同的结果:

data(mtcars)
model <- lm( mpg ~ . ,mtcars)

但允许您传递一个变量(列名)。但是,这可能会导致错误,其中 mpg 也包含在等式的右侧。不确定是否有人知道如何解决这个问题。