在R中创建for循环列表

时间:2016-07-08 06:57:08

标签: r list for-loop

我试图在R中创建列表但是我卡住了。 这是我的R代码。

modellist_nnet <- list()
window_lengths <- c(50, 100)
for(i in 1:ncol(dep_var_normalized)) {
for (j in window_lengths){

knnGrid <- expand.grid(k = c(1, 2, 5, 10, 20))

timecontrol <- trainControl(method = 'timeslice', initialWindow = j, horizon = 1, summaryFunction=absretSummary, selectionFunction = "best", 
                          returnResamp = 'final', fixedWindow = TRUE, savePredictions = 'final') 
cl <- makeCluster(4)
registerDoParallel(cl)
set.seed(503)
variable_merge <- merge(dep_var_normalized[,i], indep_var_selected[[i]], all=F)
variable_merge <- as.data.frame(variable_merge)
modellist_nnet[[i]]<- train(variable_merge[,-1], variable_merge[,1], method = "knn", 
                           trControl = timecontrol, tuneGrid = knnGrid, preProcess = c('center', 'scale'))
stopCluster(cl)
cat("Window: ", j, "dep_var:", i)
}
}

我想创建一个列表(&#34; modellist_nnet&#34;),其中包含培训结果。 发布的代码的结果只有窗口长度100(&#34; j&#34;),每个&#34; i&#34; 是否有任何可能的方法来创建具有两个窗口长度的列表(&#34; j&#34;)(50,100)为每个&#34; i&#34;?

1 个答案:

答案 0 :(得分:0)

您可以为每个i in dep_var_normalized创建一个包含一个元素的列表,其中每个元素是另一个包含与每个j in window_lengths对应的2个项目的列表。在代码中:

modellist_nnet <- list()
# New empty list
final_list <- list()
window_lengths <- c(50, 100)
for(i in 1:ncol(dep_var_normalized)) {
for (j in 1:length(window_lengths)){

knnGrid <- expand.grid(k = c(1, 2, 5, 10, 20))

timecontrol <- trainControl(method = 'timeslice', initialWindow = window_lengths[j], horizon = 1, summaryFunction=absretSummary, selectionFunction = "best", 
                          returnResamp = 'final', fixedWindow = TRUE, savePredictions = 'final') 
cl <- makeCluster(4)
registerDoParallel(cl)
set.seed(503)
variable_merge <- merge(dep_var_normalized[,i], indep_var_selected[[i]], all=F)
variable_merge <- as.data.frame(variable_merge)
# Here the index changes to "j"
modellist_nnet[[j]]<- train(variable_merge[,-1], variable_merge[,1], method = "knn", 
                           trControl = timecontrol, tuneGrid = knnGrid, preProcess = c('center', 'scale'))
stopCluster(cl)
cat("Window: ", j, "dep_var:", i)
}
final_list[i] <-modellist_nnet
}

如果您想访问与window_length = 50相对应的所有模型,可以使用lapply

model_window_50 <- lapply(final_list, function(x) x[[1]])

同样适用于window_length_100

model_window_100 <- lapply(final_list, function(x) x[[2]])