所以我的任务是将506个观察数据框分成10个不同的训练和测试集样本(替换)。 我这样做,所以我可以通过一个模型,看到10个样本的平均MSE。 到目前为止,我已经有了以下愚蠢的复杂循环:
temp_train<- setNames(lapply(1:10, function(x) {x <-homeprices[sample(1:nrow(homeprices),
.8*n, replace = FALSE), ]; x }), paste0("tr_sample.", 1:10))
for (i in 1:length(temp_train)) {
assign(paste0("df_train_", i), as.data.frame(temp_train[i]))
name<-assign(paste('df_train_', i, sep=''), x[i])
temp_test<- setNames(homeprices[-name], paste0("te_sample.", 1:10))
alpha<-assign(paste0("df_test_", i), as.data.frame(temp_test[i]))
}
这个for循环产生说df_test_2,它是一个变量506观察的数据帧。它应该是包含13个变量的102个obvs的数据帧,即不在df_train_2中的102个观测值。 因此,我的问题是,实现这一目标的更好方法是什么?如果可能的话,我宁愿不安装任何软件包,因为我想掌握基础知识。
答案 0 :(得分:1)
在基础R中处理此类任务的常见(且有效)策略不是创建每个单独的数据框,而是创建一组定义分区的索引。
例如,
x <- replicate(n = 10,expr = {sample(506,404)})
创建一个矩阵,其中十列中的每一列都填充了随机选择的404行(506的80%左右)的行索引。然后,您将遍历模型拟合并使用x
列来选择传递给模型的数据的训练子集。相同指数的负指数将产生相应的20%用于测试。
这样就不会有大量的数据框副本。