map_lgl
возвращает ошибку, потому что некоторые элементы list
имеют разные length
. Это указано в ?map
map_lgl (), map_int (), map_dbl () и map_chr () возвращают вектор atomi c указанного типа (или при попытке d ie) .
out <- map(compact_urls, has_github)
table(lengths(out))
# 1 2 3 6
#1117 22 4 1
Мы можем unlist
вывод из map
и получить sum
sum(unlist(out))
. Его можно воспроизвести на простом примере.
map_lgl(list(FALSE, TRUE), I) #each list element of length 1
#[1] FALSE TRUE
map_lgl(list(FALSE, c(TRUE, TRUE)), I) # one element of length 2
Ошибка: Результат 2 должен быть одним логическим, а не вектором класса AsIs
и длиной 2
В случае, если цель состоит в том, чтобы вернуть только одно значение ИСТИНА / ЛОЖЬ, затем обернуть функцию с помощью any
has_github <- as_mapper(~ any(str_detect(.x, "github")))
Теперь попробуйте с map_lgl
map_lgl(compact_urls, has_github) %>%
sum()
#[1] 347