отфильтровать самую длинную строку в мур - PullRequest
0 голосов
/ 16 января 2019

Рассмотрим этот пример

list('test', 'one')

Я хотел бы поместить этот список в подмножество и сохранить только самую длинную строку в списке. Использование purrr::keep не похоже на работу.

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

[[2]]
[1] "one"

Есть идеи? Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Если хранится 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(.)).

0 голосов
/ 16 января 2019

Вы можете сделать просто:

k <- list('test', 'one')
k[which.max(lapply(k, nchar))]

[[1]]
[1] "test"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...