`purrr: map ()` для печати элементов в списке, а также их имен - PullRequest
2 голосов
/ 21 июня 2020

У меня простая проблема, с которой я хотел бы использовать purrr::map().

У меня есть список именованных элементов (в этом примере используется набор данных mtcars) :

var_labels <- list(cyl =  "Number of Cylinders",
                  disp = "Displacement")

Я могу распечатать все элементы списка chr (печать является упрощением моей реальной проблемы):

print_label <- function(x){
  print(x)
}

map(var_labels, print_label)

Что дает:

>[1] "Number of Cylinders"
>[1] "Displacement"
>$cyl
>[1] "Number of Cylinders"
>
>$disp
>[1] "Displacement"

Но, похоже, я не могу распечатать элементы списка и их имена:

print_item_and_name <- function(x){
  print(x)
  print(names(x))
}

map(var_labels, print_item_and_name)

, что дает мне NULL:

>[1] "Number of Cylinders"
>NULL
>[1] "Displacement"
>NULL
>$cyl
>NULL

>$disp
>NULL

Моя настоящая проблема не просто печатает элементы и их имена, но я подозреваю, что если я смогу найти решение этого упрощенного шага, я смогу решить мою настоящую проблему.

Желаемый результат будет:

>[1] "Number of Cylinders"
>    "cyl"
>[1] "Displacement"
     "disp"

1 Ответ

3 голосов
/ 21 июня 2020

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...