如何在R的map函数中获取并打印列表元素的名称及内容?
解决在purrr::map中同时获取列表元素名称和结构的问题
嘿,我懂你的需求!你想要在遍历命名列表的时候,既能打印每个元素的结构,又能同时显示对应的元素名称,之前用.id报错是因为普通的map()并不会自动把元素名称传递给你的匿名函数,.id其实是那些用来合并数据框的map_dfr()/map_dfc()才会用到的参数,用来生成分组标识列的,不是干这个用的~
这里给你两个简单的解决方案,都是purrr包里的函数,用起来很顺手:
方法一:用imap()(最简洁)
imap()是专门为命名列表设计的迭代函数,它会自动把列表的元素名称作为第二个参数传递给匿名函数,其中:
.x代表当前遍历的列表元素(比如mtcars或者diamonds).y代表当前元素的名称(也就是"mtcars"或者"diamonds")
代码示例:
library(purrr) library(dplyr) my_dfs <- list(mtcars = mtcars, diamonds = diamonds) imap(my_dfs, ~ { # 先打印元素名称提示 cat("About to print str of", .y, ":\n") # 再打印元素结构 str(.x) # 可以加个分隔线让输出更清晰 cat("\n---\n") })
方法二:用map2()手动传递名称
如果习惯用map2(),你可以把列表本身和它的名称列表作为两个输入参数传递进去,效果和imap()一样:
map2(my_dfs, names(my_dfs), ~ { cat("About to print str of", .y, ":\n") str(.x) cat("\n---\n") })
运行上面的代码,你就能看到每个元素的名称和对应的结构依次输出啦,完全符合你的预期~
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

