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