使用`purrr:map()`函数打印列表中的项目以及它们的名称。

3
我有一个简单的问题,希望能够使用purrr :: map()解决。我有一个命名项列表(此示例使用mtcars数据集):
var_labels <- list(cyl = "气缸数量",
                  disp = "排量")
我可以打印所有chr列表项(打印是我真正问题的简化):
print_label <- function(x){
  print(x)
}
map(var_labels, print_label)
输出结果如下:
>[1] "气缸数量"
>[1] "排量"
>$cyl
>[1] "气缸数量"
>
>$disp
>[1] "排量"
但是我似乎无法打印列表项及其名称:
print_item_and_name <- function(x){
  print(x)
  print(names(x))
}
map(var_labels, print_item_and_name)
输出结果为NULL:
>[1] "气缸数量"
>NULL
>[1] "排量"
>NULL
>$cyl
>NULL
>$disp >NULL
我的真正问题不仅仅是打印项目及其名称,但我怀疑如果我能够得到这个简化步骤的解决方案,我应该能够解决我的真正问题。
期望的输出结果如下:
>[1] "气缸数量"
>    "cyl"
>[1] "排量"
     "disp"
1个回答

4

map 没有访问列表名称的权限。因此使用 imap

print_item_and_name <- function(x, y){
   print(x)
   print(y)
}

purrr::imap(var_labels, print_item_and_name)

您还可以分别传递names并使用map2:
purrr::map2(var_labels, names(var_labels), print_item_and_name)

这与在基础中使用 mapply/Map 相同。
Map(print_item_and_name, var_labels, names(var_labels))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接