在R中将列表内的列表长度相加

7

我在R语言中有一个列表里面包含了两个子列表。每个子列表包含不同数量的数据框。数据看起来像这样:

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)

我想要计算mylist中dataframe的总数(答案应该是5,因为我一共有5个数据框)。

4
可以再嵌套更深吗?如果可以,目前的解决方案都行不通。 - moodymudskipper
7个回答

7

使用lengths()函数:

sum(lengths(mylist)) # 5

来自官方文档:

[...] 是 sapply(x, length) 的一种更高效的版本


3
library(purrr)
mylist |> map(length) |> simplify() |> sum()

3

您可以尝试

lapply(mylist,length) |> unlist() |> sum()

2
这个怎么样:
sum(sapply(mylist, length))

1
你可以使用unlist函数并结合length函数。
length(unlist(mylist, recursive = F))
# [1] 5

对于任意长度的列表,可以使用rrapply::rrapply

length(rrapply(mylist, classes = "data.frame", how = "flatten"))
# 5

1

length(unlist(mylist, recursive = F))应该可以解决问题。


1
另一个可能的解决方案:
library(tidyverse)

mylist %>% flatten %>% length

#> [1] 5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接