[英]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.