Отфильтровать самую длинную строку в мур

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

list('test', 'one')

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

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

[[2]]
[1] "one"

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

2 ответа

Решение

Если 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(.)),

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

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

[[1]]
[1] "test"
Другие вопросы по тегам