过滤掉最长的字符串

时间:2019-01-15 22:33:48

标签: r purrr

考虑此示例

list('test', 'one')

我想将此列表作为子集,并且只将最长的字符串保留在列表中。使用purrr::keep似乎无效。

> list('test', 'one') %>% keep(~ nchar(.x) == max(nchar(.)))
[[1]]
[1] "test"

[[2]]
[1] "one"

有什么想法吗? 谢谢!

2 个答案:

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