首页 > 解决方案 > 计算列表列表中的项目

问题描述

我有一个长度相同的列表 (l1,l2,l3) 的列表 (ll)。

l1 <- list( c("a","b","c") , c("d","e","f") , c(NULL) )
l2 <- list( c("a","b") , c("d","e") , c(NULL) )
l3 <- list( c("a") , c("d") , c("g") ) 
ll <- list(l1,l2,l3)
str(ll)
List of 3
 $ :List of 3
  ..$ : chr [1:3] "a" "b" "c"
  ..$ : chr [1:3] "d" "e" "f"
  ..$ : NULL
 $ :List of 3
  ..$ : chr [1:2] "a" "b"
  ..$ : chr [1:2] "d" "e"
  ..$ : NULL
 $ :List of 3
  ..$ : chr "a"
  ..$ : chr "d"
  ..$ : chr "g"

有没有办法创建一个(摘要?)表来计算/比较每个列表中有多少项目,而不使用 for/loop?

我正在考虑这样的输出:

list 1 2 3
l1 3 3 0
l2 2 2 0
l3 1 1 1

标签: r

解决方案


我们可以lengths使用lapply

do.call(rbind, lapply(ll, lengths))
#     [,1] [,2] [,3]
#[1,]    3    3    0
#[2,]    2    2    0
#[3,]    1    1    1

lengths开启simplify2array

lengths(simplify2array(ll))
#      [,1] [,2] [,3]
#[1,]    3    2    1
#[2,]    3    2    1
#[3,]    0    0    1

转置得到预期的输出


推荐阅读