2014-09-30 4 views
0

Я работаю со списком dataframes (72), который я хочу использовать в качестве входных данных для train, но у меня возникают проблемы при использовании пользовательской функции. Я нашел потенциальный ответ here, но он относится к tuneGrid, а не к trainControl. Обе эти функции я написал не передать указанные trainControl параметры train:{caret} как передать параметры `trainControl` в пользовательскую функцию в r?

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) 

Обе функции выше «работы», но обе модели возврата, которые появляются, чтобы игнорировать указанный trainControl параметры. Когда я анализирую полученный список подготовленных моделей, оба примера по всей видимости, с использованием параметров по умолчанию обучения (например, method = boot):

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

Это моя первая реальная попытка использования lapply и списков, поэтому я предполагаю, приведенные выше примеры скорее всего плохо продуманны, чем недостаток caret.

Как правильно передать параметры trainControl в пользовательскую функцию с использованием функции train?

ответ

1

Вы не прошли его правильно. Вместо

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

попробовать с помощью

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

Макс