将交叉验证折叠分配给 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()
可能更干净,但 eval
和 parse
也可以:
assign(paste0("train_",i), train_missing[-eval(parse(text = paste0("folds$Fold0",i))),])
基本上将字符串作为变量计算。
编辑:将 eval 前面的减号移出粘贴语句。
使用 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()
可能更干净,但 eval
和 parse
也可以:
assign(paste0("train_",i), train_missing[-eval(parse(text = paste0("folds$Fold0",i))),])
基本上将字符串作为变量计算。
编辑:将 eval 前面的减号移出粘贴语句。