将交叉验证折叠分配给for循环中的数据集

时间:2016-02-01 05:24:23

标签: r cross-validation

使用caret包我已经使用我的分析数据集创建了10个随机交叉验证折叠:

### Create cross validation folds (k=10). ###
set.seed(123)
library(caret)
folds <- createFolds(dataset$member_id)

我手动将每个折叠分配给单独的培训和测试数据框没有问题:

train1 <- dataset[-folds$Fold01,]
test1 <- dataset[folds$Fold01,]
train2 <- dataset[-folds$Fold02,]
test2 <- dataset[folds$Fold02,]
...
train10 <- dataset[-folds$Fold10,]
test10 <- dataset[folds$Fold10,]

我想将上面的代码压缩成更优雅的循环。但是,以下代码仅将空数据集分配给train_1 - train_9

for(i in 1:9) 
{ 
  assign(paste0("train_",i), dataset[paste0("-folds$Fold0",i),])
}
train_10 <- dataset[-folds$Fold10,];

我错过了什么?

1 个答案:

答案 0 :(得分:2)

使用上面的get()可能更干净,但evalparse也有效:

assign(paste0("train_",i), train_missing[-eval(parse(text = paste0("folds$Fold0",i))),])

基本上将字符串计算为变量。

编辑:移动eval前面的减号并从粘贴语句中移出。