簡體   English   中英

運行線性判別分析 (lda) 時,R 中的 function 中的列名出現問題

[英]Problem with column names in a function in R when running linear discriminant analysis (lda)

這是我的示例數據集,其中D列是第一個因素。

df <- data.frame(A=1:10, B=2:11, C=3:12, D="A")
df[6:10, 4] <- "B"

當我運行lda時,它運行良好:

model <- lda(D ~  B + C, data = df)

print(model)

Call:
lda(D ~ B + C, data = df)

Prior probabilities of groups:
  A   B 
0.5 0.5 

Group means:
  B  C
A 4  5
B 9 10

Coefficients of linear discriminants:
        LD1
B 0.3162278
C 0.3162278

但是,當我嘗試將其復制到 function 中時,我被卡住了。

fun1 <- function(x, column){
  model <- lda(column ~  B + C, data = x)
  print(model)
}

我嘗試了幾種選擇:

  • 帶引號 -> fun1(df, "D")
  • 沒有引號 -> fun1(df, D)

在這兩種情況下,我都會收到如下所示的錯誤:

# fun1(df, "D")
Error in model.frame.default(formula = column ~ B + C, data = x) : 
variable lengths differ (found for 'B')

# fun1(df, D)
Error in model.frame.default(formula = column ~ B + C, data = x) : 
object is not a matrix

我究竟做錯了什么?

model 公式中的column被視為所提供數據中預期的變量名稱,並且不會根據您將column變量設置為(例如'D' )對其進行評估。 您必須顯式構建公式以便執行此評估,例如使用reformulate

fun1 <- function(x, column){
  form <- reformulate(c('B', 'C'), column)
  model <- lda(form, data = x)
  print(model)
}

fun1(df, 'D')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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