使用map()函数从列表中提取名称

时间:2019-10-11 14:45:02

标签: r purrr

通过使用此代码,我已经有了一个包含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必须是单个字符串,而不是长度为0的NULL”

所以我只想知道错误是什么意思?如何使用map_chr获取包含 dplyr_functions 中所有名称的向量?

1 个答案:

答案 0 :(得分:2)

map遍历列表元素的内容“值”,例如dplyr_functions[[1]],依此类推,而不是像dplyr_functions[1]那样通过元素,请尝试两者均能看到区别。因此,names(dplyr_functions[[1]])返回NULL并且map_chr失败,而names(dplyr_functions[1])返回%>%并且map_chr可以工作。

因此,我们可以使用第二种方法遍历列表索引和子集,或使用旨在遍历列表名称的imap

library(purrr)
map_chr(seq_along(dplyr_functions), ~names(dplyr_functions[.x])) 
#or
imap_chr(dplyr_functions, ~.y) %>% unname()