【问题标题】:loops and nested lists in RR中的循环和嵌套列表
【发布时间】:2022-10-14 22:49:48
【问题描述】:

我有两个嵌套列表:files = list(l1, l2)my_list = (l1=c(...),....l10 = c(...))
当我运行一个 for 循环时,我能够获得第二个列表 my_list_2 以及正确的信息。
例如:

##create an empty list
my_list_2 <-list()
for(i in 1:length(my_list)) {
  my_list_2[[i]] <- my_list[[i]] %>%
  map (function (x)  str_extract(filesI[[1]], x ))%>% 
    unlist(my_list[[i]]) %>% 
    discard(is.na)
}
my_list_2

当我尝试执行第二个 for 循环以对多个文件执行此操作时,我得到了我想要的两个文件的信息,但在一个列表中 my_list_2

for (j in 1:length(filesI)) {
  for(i in 1:length(my_list)) {
    my_list_2[[i]] <- my_list[[i]] %>%
    map (function (x)  str_extract(filesI[[j]], x )) %>% 
      unlist(my_list[[i]]) %>% 
      discard(is.na)
  }
  my_list_2
}

我无法编写正确的输出并在我的 filesI 列表中获取每个 j 的列表。任何好主意,任何建议如何做到这一点?

【问题讨论】:

  • 您每次都通过外循环重写列表my_list_2。嵌套列表会满足您的需要,还是只需要一个输出列表?
  • 嗨,谢谢你的帮助。理想的输出将是一个嵌套列表,其中包含来自 1:j 的多个列表。
  • 抱歉,如果不清楚。 l = l1, l2,.... lj

标签: r list loops combinations


【解决方案1】:

也许像下面这样的东西会做到这一点。未经测试,因为没有数据。

my_list_2 <- vector("list", length = length(filesI)*length(my_list))
nm <- expand.grid(i = seq_along(my_list), j = seq_along(filesI))[2:1]
nm <- apply(nm, 1, paste, collapse = "_")
names(my_list_2) <- nm

for (j in seq_along(filesI)) {
  for(i in seq_along(my_list)) {
    this_name <- paste(j, i, sep = "_")
    my_list_2[[this_name]] <- my_list[[i]] %>%
      map (function (x)  str_extract(filesI[[j]], x )) %>% 
      unlist() %>% 
      discard(is.na)
  }
}

编辑

要将嵌套列表作为输出,请尝试

filesI_list <- vector("list", length = length(filesI))
names(filesI_list) <- sprintf("filesI_%02d", seq_along(filesI))

for (j in seq_along(filesI)) {
  filesI_list[[j]] <- vector("list", length = length(my_list))
  names(filesI_list[[j]]) <- sprintf("my_list_%02d", seq_along(my_list))
  for(i in seq_along(my_list)) {
    filesI_list[[j]][[i]] <- my_list[[i]] %>%
      map (function(x)  str_extract(filesI[[j]], x )) %>% 
      unlist() %>% 
      discard(is.na)
  }
}

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多