我有一个包含98个项目的列表。但每个项目包含0,1,2,3,4或5个字符串。
我知道如何获得列表的长度,事实上someone has asked the question before并因为大概提出这样一个简单的问题而被拒绝投票。
但我想要一个长度为98个元素的向量,每个元素是一个0到5的整数,告诉我每个列表项中有多少个字符串。 我期待以下工作,但事实并非如此。
lapply(name.of.list,length())
从我的问题中你会看到我并不真正知道列表和项目的命名。随意把我拉直。
答案 0 :(得分:10)
Farrel,我并不完全遵循,因为'item'不是R类型。也许你有一个长度为98的list
,其中每个元素都是字符串的向量?
在这种情况下,请考虑一下:
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>
因此,您可以使用列表长度的向量,告诉您每个列表元素有多少个字符串。请注意上一个do.call(rbind, someList)
,因为我们从lapply
返回了一个列表。
另一方面,如果要计算每个列表位置的所有字符串的长度,请将简单length(x)
替换为计算字符的新函数:
R> lapply(fl, function(x) { sapply(x, function(y) nchar(y)) } )
$A
un deux
2 4
$B
one
3
$C
eins zwei drei
4 4 4
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>
答案 1 :(得分:9)
这一切看起来都很复杂 - 有一个功能专门做你要求的:
lengths #note the plural "s"
使用Dirks样本数据:
fl <- list(A=c("un", "deux"), B=c("one"), C=c("eins", "zwei", "drei"))
lengths(fl)
将返回一个命名的整数向量:
A B C
2 1 3
答案 2 :(得分:0)
下面的代码接受一个列表并返回一个长度为的矢量:
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)