我有一个清单:
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)。但没有成功。
非常感谢任何帮助!
答案 0 :(得分:2)
您可以将其全部放入匿名函数中。我们可以使用sapply()
,因为您需要原子结果。
sapply(d, function(x) x[which.max(nchar(x))])
# [1] "bbbbbbb" "c33" "d"