Я часто хочу отобразить вектор имен столбцов во фрейме данных и отслеживать вывод, используя аргумент .id
. Но для записи имен столбцов, относящихся к каждой итерации map
, в этот столбец .id
, по-видимому, требуется удвоить их имя во входном векторе - другими словами, присвоив каждому имени столбца свое имя. Если я не называю столбец своим именем, .id
просто хранит индекс итерации.
Это ожидаемое поведение, согласно purrr :: map docs :
.id
Либо строка, либо NULL. Если строка, вывод будет содержать переменную с этим именем, хранящую либо имя (если .x назван), либо индекс (если .x не назван) входных данных.
Но мой подход кажется немного неуклюжим, поэтому я представляю, что что-то упустил. Есть ли лучший способ получить список столбцов, по которым я перебираю, который не требует записи каждого имени столбца дважды во входном векторе? Любые предложения будут высоко оценены!
Вот пример для работы:
library(rlang)
library(tidyverse)
tb <- tibble(foo = rnorm(10), bar = rnorm(10))
cols_once <- c("foo", "bar")
cols_once %>% map_dfr(~ tb %>% summarise(avg = mean(!!sym(.x))), .id="var")
# A tibble: 2 x 2
var avg <-- var stores only the iteration index
<chr> <dbl>
1 1 -0.0519
2 2 0.204
cols_twice <- c("foo" = "foo", "bar" = "bar")
cols_twice %>% map_dfr(~ tb %>% summarise(avg = mean(!!sym(.x))), .id="var")
# A tibble: 2 x 2
var avg <-- var stores the column names
<chr> <dbl>
1 foo -0.0519
2 bar 0.204