{caret}如何将`trainControl`参数传递给r中的自定义函数?

时间:2014-09-30 21:34:13

标签: r function lapply r-caret

我正在使用数据框列表(72),我希望将其用作插入符train的输入,但是在使用自定义函数时我遇到了问题。我找到了可能的答案here,但它指的是tuneGrid而不是trainControl。我写的这两个函数都无法将指定的trainControl参数传递给train

fun.train.rf <- function(x) {
  ctrl <- trainControl(method = "repeatedcv", repeats = 3)
  train(index ~ .,  data = x, method = "rf", 
        trainControl = ctrl) 
}

model.list <- lapply(list.partition, fun.train.rf)

或:

fun.train.rf <- function(x) {
  train(index ~ .,  data = x, method = "rf", 
        trainControl = list(method="repeatedcv", repeats = 3, p = 0.75)) 
}

model.list <- lapply(list.partition, fun.train.rf)

以上两个函数&#34; work&#34;,但两个返回的模型似乎都忽略了指定的trainControl参数。当我检查训练模型的结果列表时,两个示例似乎都使用默认训练参数(例如,method = boot):

model.list$modelA$control$method
[1] "boot"
...

这是我第一次尝试使用lapply和list,所以我假设上面的例子可能是错误的,而不是caret本身的不足。

如何使用插入符trainControltrain参数正确传递给自定义函数?

1 个答案:

答案 0 :(得分:1)

你没有正确传递它。而不是

trainControl = list(method="repeatedcv", repeats = 3, p = 0.75)

尝试使用

trControl = trainControl(method="repeatedcv", repeats = 3, p = 0.75)

最高