在函数内的 lm 公式中动态传递变量名称
Pass dynamically variable names in lm formula inside a function
我有一个需要两个参数的函数:
- dataRead(来自用户的数据帧)
- variableChosen(用户想要使用哪个因变量
在模型中)
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 也包含在等式的右侧。不确定是否有人知道如何解决这个问题。
我有一个需要两个参数的函数:
- dataRead(来自用户的数据帧)
- variableChosen(用户想要使用哪个因变量 在模型中)
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 也包含在等式的右侧。不确定是否有人知道如何解决这个问题。