使用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,];
我错过了什么?
答案 0 :(得分:2)
使用上面的get()
可能更干净,但eval
和parse
也有效:
assign(paste0("train_",i), train_missing[-eval(parse(text = paste0("folds$Fold0",i))),])
基本上将字符串计算为变量。
编辑:移动eval前面的减号并从粘贴语句中移出。