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

时间:2010-01-17 02:43:35

标签: list r

我有一个包含98个项目的列表。但每个项目包含0,1,2,3,4或5个字符串。

我知道如何获得列表的长度,事实上someone has asked the question before并因为大概提出这样一个简单的问题而被拒绝投票。

但我想要一个长度为98个元素的向量,每个元素是一个0到5的整数,告诉我每个列表项中有多少个字符串。 我期待以下工作,但事实并非如此。

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

从我的问题中你会看到我并不真正知道列表和项目的命名。随意把我拉直。

3 个答案:

答案 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)