从列表的每个元素中获取最长的项目

时间:2017-03-25 22:31:05

标签: r

我有一个清单:

 a = c("aaaa", "bbbbbbb")
 b = c("a1", "b2", "c33")
 c = "d"
 d = list(a, b, c)

如何在没有循环的情况下从列表的每个元素中获取最长的项目? 换句话说,目标是获得:

"bbbbbbb" "c33" "d"

我知道如何计算字符数:

lapply(d, nchar)
[[1]]
[1] 4 7

[[2]]
[1] 2 2 3

[[3]]
[1] 1

我知道如何找到最长项目的位置:

lapply(lapply(d, nchar), which.max)
[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 1

但找不到选择项目的方法。

我还考虑按字符数(nchar)对项目进行排序,以便通过lapply选择所有第1项(d," [[",1)。但没有成功。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以将其全部放入匿名函数中。我们可以使用sapply(),因为您需要原子结果。

sapply(d, function(x) x[which.max(nchar(x))])
# [1] "bbbbbbb" "c33"     "d"