[英]Pass dynamically variable names in lm formula inside a function
我有一個要求兩個參數的函數:
Obs:獨立變量將始終是第一列
但是,例如,如果用戶給我一個名為 dataGiven 的數據框,其中的列名稱是:“劑量”、“重量”,我希望我的模型名稱在我的結果中包含這些名稱
我的實際函數正確地生成了 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"
首先,沒有可重現的代碼示例 ,總是很難提供幫助。 對於將來的帖子,我建議您熟悉如何提供這樣一個可重復性最小的示例。
我不是你的要求完全清楚,所以我認為這是有關如何創建適合基於一個簡單的線性模型的功能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 也包含在等式的右側。 不確定是否有人知道如何解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.