总结R中列表内列表的长度
Summing the lengths of lists inside a list in R
我在 R 的一个列表中有 2 个列表。每个子列表包含不同数量的数据帧。数据如下所示:
df1 <- data.frame(x = 1:5, y = letters[1:5])
df2 <- data.frame(x = 1:15, y = letters[1:15])
df3 <- data.frame(x = 1:25, y = letters[1:25])
df4 <- data.frame(x = 1:6, y = letters[1:6])
df5 <- data.frame(x = 1:8, y = letters[1:8])
l1 <- list(df1, df2)
l2 <- list(df3, df4, df5)
mylist <- list(l1, l2)
我想计算我的列表中的数据帧总数(答案应该是 5,因为我总共有 5 个数据帧)。
您可以 unlist
并使用 length
。
length(unlist(mylist, recursive = F))
# [1] 5
对于任意长度的列表,可以使用:
length(rrapply(mylist, classes = "data.frame", how = "flatten"))
# 5
library(purrr)
mylist |> map(length) |> simplify() |> sum()
你可以试试
lapply(mylist,length) |> unlist() |> sum()
使用lengths()
:
sum(lengths(mylist)) # 5
来自官方文档:
[...] a more efficient version of sapply(x, length)
length(unlist(mylist, recursive = F))
应该可以。
这个怎么样:
sum(sapply(mylist, length))
另一个可能的解决方案:
library(tidyverse)
mylist %>% flatten %>% length
#> [1] 5
我在 R 的一个列表中有 2 个列表。每个子列表包含不同数量的数据帧。数据如下所示:
df1 <- data.frame(x = 1:5, y = letters[1:5])
df2 <- data.frame(x = 1:15, y = letters[1:15])
df3 <- data.frame(x = 1:25, y = letters[1:25])
df4 <- data.frame(x = 1:6, y = letters[1:6])
df5 <- data.frame(x = 1:8, y = letters[1:8])
l1 <- list(df1, df2)
l2 <- list(df3, df4, df5)
mylist <- list(l1, l2)
我想计算我的列表中的数据帧总数(答案应该是 5,因为我总共有 5 个数据帧)。
您可以 unlist
并使用 length
。
length(unlist(mylist, recursive = F))
# [1] 5
对于任意长度的列表,可以使用
length(rrapply(mylist, classes = "data.frame", how = "flatten"))
# 5
library(purrr)
mylist |> map(length) |> simplify() |> sum()
你可以试试
lapply(mylist,length) |> unlist() |> sum()
使用lengths()
:
sum(lengths(mylist)) # 5
来自官方文档:
[...] a more efficient version of sapply(x, length)
length(unlist(mylist, recursive = F))
应该可以。
这个怎么样:
sum(sapply(mylist, length))
另一个可能的解决方案:
library(tidyverse)
mylist %>% flatten %>% length
#> [1] 5