Я хочу использовать env_get
для оценки переменной в среде дедушки (я думаю) вызова mutate, но я не смог справиться.Ниже я описываю минимальный пример.
Учитывая список, подобный следующему:
library(dplyr)
l <- list(X = 10,
df = tibble(n = seq(-10,10), y = rnorm(21), z = runif(21)))
И пользовательское изменение для этих списков.
mutate_.list <- function(.data, ...){
mutate_(.data$df, ...)
}
Я хочуфункция, которая может быть запущена внутри mutate и может использовать значение X
.Что-то вроде следующего, которое не работает:
addX <- function(x) {
X <- rlang::env_get(env = parent.frame(2), 'X', inherit = TRUE)
x + X
}
Это работает, как и ожидалось.
mutate(l, n + 1)
И я хотел бы иметь возможность сделать это:
mutate(l, addX(n))
И это не работает.Думаю, мне стоит как-то подойти к родителям и иметь возможность обратиться к списку, но я не справился.Я пытался получить правдоподобные имена аргументов списка, как это:
addX_test <- function(x) {
print(rlang::env_names(parent.frame(1)))
x
}
mutate(l, addX_test(n))
Но я получаю такие вещи, как:
[1] "~" ".top_env"
[3] ".__tidyeval_data_mask__." ".env"
Есть указатели?Это вообще выполнимо?