Извлечение имен из списка с помощью функции map () - PullRequest
1 голос
/ 11 октября 2019

У меня уже есть список, содержащий все функции в dplyr с использованием этого кода

content <- mget(ls("package:dplyr"), inherits = TRUE)
dplyr_functions <- Filter(is.function, content)

Результат, который я хочу получить, аналогичен результату

names(dplyr_functions)

Это будетchr вектор, содержащий все имена функций в пакете dplyr. Но когда я использую функцию map(), мой код выглядит так:

dplyr_name <- map_chr(dplyr_functions, names)

Сказана ошибка:

"Результат 1 должен быть одной строкой, а не NULL издлина 0 "

Так что я просто хочу знать, что означает ошибка? Как я могу использовать map_chr, чтобы получить вектор, содержащий все имена в dplyr_functions ?

1 Ответ

2 голосов
/ 11 октября 2019

map перебирает «значение» содержимого элемента списка, например, dplyr_functions[[1]] и т. Д., А не через элемент, как в dplyr_functions[1], попробуйте оба, чтобы увидеть разницу. Следовательно, names(dplyr_functions[[1]]) возвращает NULL и map_chr завершается неудачно, в то время как names(dplyr_functions[1]) возвращает %>% и map_chr может работать.

Таким образом, мы можем циклически перебирать индекс списка и подмножество, используя 2-й метод илииспользуйте imap, который предназначен для просмотра списка имен.

library(purrr)
map_chr(seq_along(dplyr_functions), ~names(dplyr_functions[.x])) 
#or
imap_chr(dplyr_functions, ~.y) %>% unname()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...