考虑此示例
list('test', 'one')
我想将此列表作为子集,并且只将最长的字符串保留在列表中。使用purrr::keep
似乎无效。
> list('test', 'one') %>% keep(~ nchar(.x) == max(nchar(.)))
[[1]]
[1] "test"
[[2]]
[1] "one"
有什么想法吗? 谢谢!
答案 0 :(得分:1)
如果存储了l
,那么实际上基数R似乎最好:
l <- list('test', 'one')
# If you want only the first one or there is a unique element
l[which.max(nchar(l))]
# [[1]]
# [1] "test"
# General
l[nchar(l) == max(nchar(l))]
# [[1]]
# [1] "test"
现在我们可以使用keep
list('test', 'one') %>% keep(function(x) nchar(x) == max(nchar(.)))
# [[1]]
# [1] "test"
问题似乎在于.
和.x
都只是~ nchar(.x) == max(nchar(.))
中列表的各个元素。
答案 1 :(得分:0)
您可以做简单:
k <- list('test', 'one')
k[which.max(lapply(k, nchar))]
[[1]]
[1] "test"