List 生成每个列表项中项数的向量

List 生成每个列表项中项数的向量,list,r,List,R,我有一份包含98项的清单。但每个项目都包含0、1、2、3、4或5个字符串 我知道如何知道名单的长度,事实上,我因为问了这么简单的问题而被否决了 但是我想要一个98个元素长的向量,每个元素都是0到5之间的整数,告诉我每个列表项中有多少字符串。 我原以为下面的方法会奏效,但没有奏效 lapply(name.of.list,length()) 从我的问题中你会看到,我并不真正知道列表和项目的名称。请随意理清我的思路。法雷尔,我不完全明白“项目”不是R类型。也许您有一个长度为98的列表,其中每个元素都

我有一份包含98项的清单。但每个项目都包含0、1、2、3、4或5个字符串

我知道如何知道名单的长度,事实上,我因为问了这么简单的问题而被否决了

但是我想要一个98个元素长的向量,每个元素都是0到5之间的整数,告诉我每个列表项中有多少字符串。 我原以为下面的方法会奏效,但没有奏效

lapply(name.of.list,length())

从我的问题中你会看到,我并不真正知道列表和项目的名称。请随意理清我的思路。

法雷尔,我不完全明白“项目”不是R类型。也许您有一个长度为98的
列表,其中每个元素都是字符串的向量

在这种情况下,考虑这一点:

R> fl <- list(A=c("un", "deux"), B=c("one"), C=c("eins", "zwei", "drei"))
R> lapply(fl, function(x) length(x))
$A
[1] 2

$B
[1] 1

$C
[1] 3
R> do.call(rbind, lapply(fl, function(x) length(x)))
  [,1]
A    2
B    1
C    3
R> 
如果这不是您想要的,也许您可以模拟一些示例输入数据

编辑::对于您的评论,您想要的可能是:

R> do.call(rbind, lapply(fl, length))
  [,1]
A    2
B    1
C    3
R> 
请注意,我传入的是函数名
length
,而不是(显示的)函数体
length()。因为这很容易混淆,所以我只需像第一个回答中那样应用几乎总是使用一个匿名函数

是的,这也可以通过
sapply
或者甚至一些
**ply
功能来实现:

R> sapply(fl, length)
A B C 
2 1 3 
R> lapply(fl, length)
[1] 2 1 3
R> 

下面的代码接受列表并返回长度向量:

x = c("vectors", "matrices", "arrays", "factors", "dataframes", "formulas", 
      "shingles", "datesandtimes", "connections", "lists")
xl = list(x)
fnx = function(xl){length(unlist(strsplit(x, "")))}
lv = sapply(x, fnx)

所有这一切似乎都非常复杂-有一个函数专门满足您的要求:

lengths  #note the plural "s"
使用Dirks样本数据:

fl <- list(A=c("un", "deux"), B=c("one"), C=c("eins", "zwei", "drei"))
lengths(fl)

你做这件事的第一步就是我想要的。让我去试试。是的,成功了。好极了事实上,sapply工作得更好,因为它制作了一个简单的单向量,我现在可以将它绑定到一个预先存在的数据帧上。现在,您可以向我解释lappy(name.of.list,length())和lappy(name.of.list,function(x)length(x))是如何不同的。请参阅我回答中的附加编辑内容——本质上
length
不同于
length()
,您想要前者。如果列表项是tibble,如何获得tibble的长度?
fl <- list(A=c("un", "deux"), B=c("one"), C=c("eins", "zwei", "drei"))
lengths(fl)
A B C 
2 1 3