多个数据帧的插入符训练功能作为功能

Caret train function for muliple data frames as function

6年前就有一个类似的问题一直没有解决(R -- Can I apply the train function in caret to a list of data frames?) 这就是我再次提出这个话题的原因。

我目前正在为我的大 R 项目编写自己的函数,我想知道是否有机会总结 pakage caret 的模型训练函数 train()对于具有不同预测变量的不同数据帧。 我的函数应如下所示:

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 公式无法处理作为输入的变量。

有什么我想念的吗? 预先感谢您帮助我!

解决这个问题将对我的工作有很大帮助sheet确保清洁和安全工作。

通过写predictor_iris <- "Species",你基本上是在predictor_iris中保存一个字符串对象。因此,当您 运行 lda_ex 时,我猜您会在 train() 中的 formula 对象方面产生一些错误,因为您正试图使用​​协变量向量来预测字符串。

确实,我尝试了以下玩具示例:

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)