与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"
我该如何解决?
答案 0 :(得分:5)
轻松使用imap
中的purrr
。
请注意,在使用公式快捷方式时,第一个参数是值(.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]]))