首页 > 解决方案 > 过滤掉 purr 中最长的字符串

问题描述

考虑这个例子

list('test', 'one')

我想对这个列表进行子集化,并且只保留列表中最长的字符串。使用purrr::keep似乎不起作用。

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

[[2]]
[1] "one"

有任何想法吗?谢谢!

标签: rpurrr

解决方案


如果l已存储,则确实 base 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(.)).


推荐阅读