Получить имя элемента map-loop при циклическом просмотре столбцов таблицы - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы извлечь имя столбца текущего столбца при цикле с картой.Например, я хотел бы отменить масштабирование, если некоторые переменные:

library(tidyverse)
d <- tibble(a = runif(10), b = runif(10), c = runif(10))
l <- list(a = list(min = -19, max = 20), b = list(min = 22, max = 55), c = list(min = 80, max = 120))
restore <- function(x, r) x * (r$max - r$min) + r$min
my_cols <- c("a", "c")
d %>%
  select(!!!my_cols) %>%
  map(~restore(.x, l[[name(.x)]]))
# Error in name(.x) : could not find function "name"

Как я могу это исправить?

1 Ответ

0 голосов
/ 25 февраля 2019

Легко с imap из purrr.

Обратите внимание, что при использовании ярлыка формулы первый аргумент - это значение (.x), а второй - позиция / имя (* 1006).*).

Подробнее см. На странице справки по imap.Но, по сути, если объект, который вы перебираете, имеет имена, то вторым аргументом (.y) функции является имя (в противном случае это позиция).

library(tibble)
library(purrr)
library(dplyr)

d <- tibble(a = runif(10), b = runif(10), c = runif(10))
l <- list(a = list(min = -19, max = 20), b = list(min = 22, max = 55), c = list(min = 80, max = 120))
restore <- function(x, r) x * (r$max - r$min) + r$min
my_cols <- c("a", "c")
d %>%
  select(!!!my_cols) %>%
  imap(~restore(.x, l[[.y]]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...