【问题标题】:How to deal with this error in nested lists?如何处理嵌套列表中的这个错误?
【发布时间】:2020-10-27 21:34:13
【问题描述】:

我在下面有这个 R 代码来填充嵌套列表:

    my_information = list()
    for(a in 1:(length(first_list))){
    my_information[[paste0("first_list",a)]]=a
      for(b in 1:(length(second_list))){
        my_information[[paste0("first_list",a)]][[paste0("second_list",b)]] = second_list[[b]] - first_list[[a]]
       if(my_information[[paste0("first_list",a)]][[paste0("second_list",b)]]>0){

        for(c in 1:length(third_list)){
          my_information[[paste0("first_list",a)]][[paste0("second_list",b)]][[paste0("third_list",c)]] = third_list[[c]] - second_list[[b]])
         
          for(d in 1:length(fourth_list)){
           
            my_information[[paste0("first_list",a)]][[paste0("second_list",b)]][[paste0("third_list",c)]][[paste0("fourth_list",d)]] = fourth_list[[d]] - third_list[c])
              }
            }
        }
      }
    }

当我运行这段代码时,我得到了错误:

Error in my_information[[paste0("first_list",a)]][[paste0("second_list",b)]]<- `*vtmp*`
 more elements supplied than there are to replace

我不确定如何在嵌套循环中解决这个问题,欢迎任何想法

【问题讨论】:

标签: r list nested-loops nested-lists


【解决方案1】:

我让它发挥作用,但没有数据和预期的输出,我不确定它是否“有效”。主要问题是(我认为)您希望每个列表的每个元素本身都是一个列表。编写代码的方式,您还没有将这些元素定义为列表,它们只是向量。下面的代码将每个列表的每个元素定义为循环内的列表,然后填充它。

first_list <- list(a=1, b=2, c=3)
second_list <- list(d=4, e=5, f=6)
third_list <- list(g=7, h=8, i=9)
fourth_list <- list(j=10, k=11, l=12)

my_information = list()
for(a in 1:(length(first_list))){
  my_information[[paste0("first_list",a)]] <- a
  for(b in 1:(length(second_list))){
    my_information[[paste0("first_list",a)]] <- list()
    my_information[[paste0("first_list",a)]][[paste0("second_list",b)]] <- second_list[[b]] - first_list[[a]]
    if(my_information[[paste0("first_list",a)]][[paste0("second_list",b)]]>0){
      for(c in 1:length(third_list)){
        my_information[[paste0("first_list",a)]][[paste0("second_list",b)]] <- list()
        my_information[[paste0("first_list",a)]][[paste0("second_list",b)]][[paste0("third_list",c)]] = third_list[[c]] - second_list[[b]]
        for(d in 1:length(fourth_list)){
          my_information[[paste0("first_list",a)]][[paste0("second_list",b)]][[paste0("third_list",c)]] <- list()
          my_information[[paste0("first_list",a)]][[paste0("second_list",b)]][[paste0("third_list",c)]][[paste0("fourth_list",d)]] = fourth_list[[d]] - third_list[[c]]
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多