6 年前有一個與我類似的問題,但尚未解決(R - 我可以將插入符號中的 train 函式應用于資料幀串列嗎?)這就是我再次提出這個話題的原因。
我目前正在為我的大型 R 專案撰寫自己的函式,我想知道是否有機會總結具有不同預測變數的不同資料幀train()的包的模型訓練函式。caret我的功能應該是這樣的:
lda_ex <- function(data, predictor){
model <- train(predictor ~., data,
method = "lda",
trControl = trainControl(method = "none"),
preProc = c("center","scale"))
return(model)
}
之后使用它應該像這樣作業:
data_iris <- iris
predictor_iris <- "Species"
iris_res <- lda_ex(data = data_iris, predictor = predictor_iris)
不幸的是,就我所嘗試的而言,R 公式無法處理作為輸入的變數。
有什么我想念的嗎?預先感謝您幫助我!
解決這個問題將有助于我確保我的功能表清潔和安全作業。
uj5u.com熱心網友回復:
通過撰寫predictor_iris <- "Species",您基本上是將字串物件保存在predictor_iris. 因此,當您運行 時lda_ex,我猜您會遇到與 in 中的formula物件有關的一些錯誤train(),因為您正在嘗試使用協變數向量來預測字串。
事實上,我嘗試了以下玩具示例:
X = rnorm(1000)
Y = runif(1000)
predictor = "Y"
lm(predictor ~ X)
這給出了關于變數長度差異的錯誤。
讓我修改你的功能:
lda_ex <- function(data, formula){
model <- train(formula, data,
method = "lda",
trControl = trainControl(method = "none"),
preProc = c("center","scale"))
return(model)
}
關鍵區別在于,現在我們必須傳入整體formula,而不僅僅是預測變數。這樣,我們就避免了字串相關的問題。
library(caret) # Recall to specify the packages needed to reproduce your examples!
data_iris <- iris
formula_iris = Species ~ . # Key difference!
iris_res <- lda_ex(data = data_iris, formula = formula_iris)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/412388.html
標籤:
下一篇:Barrating不是函式
