我正在尝试更新我的以下代码,因为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(.))
但我不知道如何解决它。谢谢!