Отфильтровать самую длинную строку в мур
Рассмотрим этот пример
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"