Я пытаюсь обновить следующий код, потому что funs( MY_FUN )
мягко обесценивается. Я знаю, что заменой этого должно быть list( ~MY_FUN )
, но, похоже, это не работает для моего кода.
Вот мои фреймы данных:
fake_data <- data.frame(var1 = rep("TEMP", times = 5),
var2 = rep("TEMP", times = 5),
var3 = c(1:5),
stringsAsFactors = FALSE)
lookup_sub <- data.frame(var_names = c("var1", "var2", "var3"),
example_value = c("a", "b", "c"),
stringsAsFactors = FALSE)
Следующая строка кода работает и делает именно то, что я хочу:
library(tidyverse)
library(rlang)
fake_data %>%
mutate_if(.predicate = rlang::as_function(function(x){identical("TEMP", unique(x))}),
.funs = funs(as.character((lookup_sub %>% filter(var_names == quo_name(quo(.))) %>% pull(example_value))[1])))
В результате чего
var1 var2 var3
1 a b 1
2 a b 2
3 a b 3
4 a b 4
5 a b 5
НО с использованием аргумента без обесценения дает все значения NA строкам, которые оцениваются как TRUE в предикате
fake_data %>%
mutate_if(.predicate = rlang::as_function(function(x){identical("TEMP", unique(x))}),
.funs = list(~as.character((lookup_sub %>% filter(var_names == quo_name(quo(.))) %>% pull(example_value))[1])))
что приводит к
var1 var2 var3
1 <NA> <NA> 1
2 <NA> <NA> 2
3 <NA> <NA> 3
4 <NA> <NA> 4
5 <NA> <NA> 5
Кто-нибудь может мне это объяснить? Я знаю, что проблема возникает из-за quo_name(quo(.))
, но не знаю, как ее исправить. Спасибо!
.predicate = ~identical("TEMP", unique(.x))
- person Dan Chaltiel   schedule 12.03.2020across
для этого типа проблемы - person Richard Telford   schedule 12.03.2020dplyr
- person Dan Chaltiel   schedule 13.03.2020