R 如何从列表中提取特定元素并返回向量

R 如何从列表中提取特定元素并返回向量,r,R,我的列表结构如下: mylist <- list(list(list()), list(list()), list(list()), list(list()), list(structure(list(source = c("IDcode", "IDcode", "IDcode" ), db_id = c("id13653662", "id3396732", "id995182")), class = "data.frame", row.names = c(NA,

我的列表结构如下:

mylist <- list(list(list()), 
    list(list()), list(list()), list(list()),
    list(structure(list(source = c("IDcode", "IDcode", "IDcode"
    ), db_id = c("id13653662", "id3396732", "id995182")), class = "data.frame", row.names = c(NA, 
    3L))), list(structure(list(source = c("IDcode", "IDcode"
    ), db_id = c("id1494969", "id869437")), class = "data.frame", row.names = 1:2)), 
    list(structure(list(source = c("IDcode", "IDcode"), db_id = c("id578674", 
    "id531006")), class = "data.frame", row.names = 1:2)), list(
        structure(list(source = c("IDcode", "IDcode"), db_id = c("id578673", 
        "id531005")), class = "data.frame", row.names = 1:2)))



> mylist
[[1]]
[[1]][[1]]
list()


[[2]]
[[2]][[1]]
list()


[[3]]
[[3]][[1]]
list()


[[4]]
[[4]][[1]]
list()


[[5]]
[[5]][[1]]
  source      db_id
1 IDcode id13653662
2 IDcode  id3396732
3 IDcode   id995182


[[6]]
[[6]][[1]]
  source     db_id
1 IDcode id1494969
2 IDcode  id869437


[[7]]
[[7]][[1]]
  source    db_id
1 IDcode id578674
2 IDcode id531006


[[8]]
[[8]][[1]]
  source    db_id
1 IDcode id578673
2 IDcode id531005

最好的方法是什么?

因为我们在每个列表中都有一个列表,所以我们
将其取消列出一级,然后根据每个列表的长度返回粘贴的输出或
NA

sapply(unlist(mylist, recursive = FALSE), function(x) 
       if(length(x)) paste0(x$db_id, collapse = ";") else NA)

#[1] NA                NA                              NA                     
#[4] NA       "id13653662;id3396732;id995182" "id1494969;id869437"         
#[7] "id578674;id531006"         "id578673;id531005"

因为我们在每个列表中都有一个列表,所以我们
unlist
it一级并根据每个列表的长度返回粘贴的输出或
NA

sapply(unlist(mylist, recursive = FALSE), function(x) 
       if(length(x)) paste0(x$db_id, collapse = ";") else NA)

#[1] NA                NA                              NA                     
#[4] NA       "id13653662;id3396732;id995182" "id1494969;id869437"         
#[7] "id578674;id531006"         "id578673;id531005"

你是说什么

rbind(mylist[[5]][[1]],mylist[[6]][[1]], mylist[[7]][[1]], mylist[[8]][[1]])
 source      db_id
1 IDcode id13653662
2 IDcode  id3396732
3 IDcode   id995182
4 IDcode  id1494969
5 IDcode   id869437
6 IDcode   id578674
7 IDcode   id531006
8 IDcode   id578673
9 IDcode   id531005


你是说什么

rbind(mylist[[5]][[1]],mylist[[6]][[1]], mylist[[7]][[1]], mylist[[8]][[1]])
 source      db_id
1 IDcode id13653662
2 IDcode  id3396732
3 IDcode   id995182
4 IDcode  id1494969
5 IDcode   id869437
6 IDcode   id578674
7 IDcode   id531006
8 IDcode   id578673
9 IDcode   id531005

vec
vec
 mySecFun(mylist1); mySecFun(mylist2)
vec <- vector()

for (i in 1:length(mylist)) {
  for (j in 1:length(mylist[[i]])) {
       if(length(mylist[[i]][[j]]) == 0){
          vec[i] <- NA
       }
       else{      
         vec[i] <- paste0(mylist[[i]][[j]]$db_id,collapse = ";")
       }
   }
}