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

Assigning cross validation folds to datasets in for loop

使用 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,];

我错过了什么?

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

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

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

编辑:将 eval 前面的减号移出粘贴语句。