嵌套循环 - 下标越界错误

问题描述 投票:0回答:1

示例:


set.seed(1)
data1 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data2 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data3 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data4 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data5 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))

rolling_window_set <-c(12,36,60) #Adding 12m / 36m and 60m time periods #Improve code in this section
data_period_window <-c()
my_list <- list(data1,data2,data3,data4,data5)
for(j in 1:length(rolling_window_set)) {
  for (i in 1:length(my_list)) {
    data_period_window[[j]][[i]] = my_list[[i]][(nrow(my_list[[i]])-rolling_window_set[[j]]+1):nrow(my_list[[i]]), ]
  }
}

我的目标是创建一个每层包含 5 个组件的列表。 [[1]][[1]],[[1]][[2]]...[[1]][[5]]....[[2]][[1]].. .[[2]][[5]]....[[3]][[1]]至[[3]][[5]]。列表 1 输出应该是 ncol = 12 的数据帧,列表 2 应该是 ncol = 36 的数据帧,列表 3 应该是 ncol = 60 的数据帧。

我收到下标越界错误。我确信这与嵌套循环结构有关,但真的不知道如何修复。

r for-loop nested-loops
1个回答
0
投票

您正在尝试访问不存在的元素。在循环内扩展列表,它将起作用。

set.seed(1)
data1 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data2 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data3 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data4 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))
data5 <- as.data.frame(matrix(runif(n=10, min =-0.01, max=0.01), nrow =100, ncol =5))

rolling_window_set <-c(12,36,60) #Adding 12m / 36m and 60m time periods #Improve code in this section
data_period_window <- c()
my_list <- list(data1,data2,data3,data4,data5)
for(j in 1:length(rolling_window_set)) {
    data_period_window[[j]] <- list(NA)
    for (i in 1:length(my_list)) {
        data_period_window[[j]][[i]] = my_list[[i]][(nrow(my_list[[i]])-rolling_window_set[[j]]+1):nrow(my_list[[i]]), ]
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.