簡體   English   中英

在函數內的 lm 公式中傳遞動態變量名稱

[英]Pass dynamically variable names in lm formula inside a function

我有一個要求兩個參數的函數:

  • dataRead(來自用戶的數據幀)
  • variableChosen(用戶想要在模型中使用的因變量)

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來構造一個與lmdata參數一起使用的公式。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM