簡體   English   中英

如何將列表中的列表取消嵌套到列表中?

[英]How to unnest lists in a list into a list?

考慮最小的工作示例

raw_list <- list(1, 2)
process_list <- function(item) {
    if(item == 1) {
        return(list(c(1, 1), c(2, 2)))
    }
    else {
        return(c(3, 3))
    }
}

processed_list <- lapply(raw_list, process_list)

df <- do.call(rbind, processed_list)

processed_list

[[1]]
[[1]][[1]]
[1] 1 1

[[1]][[2]]
[1] 2 2


[[2]]
[1] 3 3

df

     [,1]      [,2]     
[1,] numeric,2 numeric,2
[2,] 3         3 

如何取消嵌套processed_list列表以獲取

[[1]]
[1] 1 1

[[2]]
[1] 2 2

[[3]]
[1] 3 3

或者我如何取消嵌套df以獲得

     [,1] [,2]
[1,]    1    1
[2,]    2    2
[3,]    3    3

我認為您還應該在函數中list c(3, 3) ,然后unlist非遞歸方式取消列出。

raw_list <- list(1, 2)

process_list <- function(item) {
  if(item == 1) {
    return(list(c(1, 1), c(2, 2)))
  }
  else {
    return(list(c(3, 3)))
  }
}

processed_list <- lapply(raw_list, process_list)

unlist(processed_list, recursive=FALSE)
# [[1]]
# [1] 1 1
# 
# [[2]]
# [1] 2 2
# 
# [[3]]
# [1] 3 3

你可以簡單地使用

simple_list <- unlist(processed_list, recursive = FALSE)

然后簡單地

df <- do.call(rbind, simple_list)

這給出了:

[[1]]
[1] 1 1

[[2]]
[1] 2 2

[[3]]
[1] 3

[[4]]
[1] 3

     [,1] [,2]
[1,]    1    1
[2,]    2    2
[3,]    3    3
[4,]    3    3

嘗試這個

processed_list[[2]] <- list(processed_list[[2]])

processed_list <- processed_list |> unlist(recursive = FALSE)

df <- do.call(rbind, processed_list)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM