R 如何使用嵌套列表进行循环?

R 如何使用嵌套列表进行循环?,r,list,for-loop,nested,iteration,R,List,For Loop,Nested,Iteration,下面是一个具有三个级别的嵌套列表示例(带有虚拟编号): mylist <- list("A" = list("A1" = list("1", "2", "3"), "A2" = list("10", "20", "30")),

下面是一个具有三个级别的嵌套列表示例(带有虚拟编号):

mylist <- list("A" = list("A1" = list("1", "2", "3"),
                          "A2" = list("10", "20", "30")),                          
               "B" = list("B1" = list("11", "22", "33"),
                          "B2" = list("110", "220", "330")))
下面是接收输出的潜在数据帧结构

df <- data.frame(First_level = character(),
                 Second_level = character(),
                 Last_value = integer())

df我们可以使用
rrapply
melt

library(rrapply)
library(dplyr)
rrapply(mylist, how = 'melt') %>% 
    group_by(First_level = L1, Second_level = L2) %>% 
    summarise(Last_value = last(value), .groups = 'drop')
# A tibble: 4 x 3
# Groups:   First_level [2]
#  First_level Second_level Last_value
#  <chr>       <chr>        <chr>     
#1 A           A1           3         
#2 A           A2           30        
#3 B           B1           33        
#4 B           B2           330     

使用
tidyverse
软件包:

library(tidyverse)

map(mylist, ~map(.x, tail, 1)) %>% 
  unlist() %>% 
  as.list() %>% 
  as_tibble() %>%
  pivot_longer(cols = everything()) %>% 
  separate(col = "name", sep = "\\.", into = c("first_level", "second_level"))

# A tibble: 4 x 3
  first_level second_level value
  <chr>       <chr>        <chr>
1 A           A1           3    
2 A           A2           30   
3 B           B1           33   
4 B           B2           330 
库(tidyverse)
地图(mylist,~map(.x,tail,1))%>%
取消列表()%>%
as.list()%>%
as_tible()%>%
pivot_更长(cols=everything())%>%
分离(col=“name”,sep=“\\.”为=c(“第一级”,“第二级”))
#一个tibble:4x3
第一级第二级值
1 A A1 3
2 A A2 30
3 B B1 33
4 B B2 330

太棒了!我不知道这个包裹。感谢您快速给出答案,并指出我在for循环中的错误!明亮的谢谢你迅速的回答!
library(rrapply)
library(dplyr)
rrapply(mylist, how = 'melt') %>% 
    group_by(First_level = L1, Second_level = L2) %>% 
    summarise(Last_value = last(value), .groups = 'drop')
# A tibble: 4 x 3
# Groups:   First_level [2]
#  First_level Second_level Last_value
#  <chr>       <chr>        <chr>     
#1 A           A1           3         
#2 A           A2           30        
#3 B           B1           33        
#4 B           B2           330     
out <- list()
for(i in seq_along(mylist)) {
    for(j in seq_along(mylist[[i]])) {
        out <- c(out, tail(mylist[[i]][[j]], 1))
    }
 }
library(tidyverse)

map(mylist, ~map(.x, tail, 1)) %>% 
  unlist() %>% 
  as.list() %>% 
  as_tibble() %>%
  pivot_longer(cols = everything()) %>% 
  separate(col = "name", sep = "\\.", into = c("first_level", "second_level"))

# A tibble: 4 x 3
  first_level second_level value
  <chr>       <chr>        <chr>
1 A           A1           3    
2 A           A2           30   
3 B           B1           33   
4 B           B2           330