在循环遍历tibble列时获取map-loop-element的名称

r.u*_*apr 4 r dplyr purrr tidyverse

我想在使用map循环时提取当前列的列名.例如,如果有一些变量,我想取消缩放:

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"
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

rma*_*gno 5

容易imappurrr.

请注意,使用公式快捷方式时,第一个参数是值(.x),第二个参数是位置/名称(.y).

有关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]]))
Run Code Online (Sandbox Code Playgroud)