我花了几个小时试图在公式的 RHS 上粘上胶水,但没有任何线索。这是一个简单的表示。
meta <- function(x, var, suffix){
x<- x %>% mutate("{{var}}_{suffix}":= 5)
x<- x %>% mutate("{{var}}_{suffix}_new":= {{var}} - "{{var}}_{suffix}")
}
x<- meta(mtcars, mpg, suf)
#Should be equivalent to
x<- mtcars %>% mutate(mpg_suf:= 5)
x<- x%>% mutate(mpg_suf_new:= mpg - mpg_suf)
#N: Tried https://stackoverflow.com/questions/70427403/how-to-correctly-glue-together-prefix-suffix-in-a-function-call-rhs but none of the methods in it worked, unfortunately
元函数给我“local_error_context(点=点,.index = i,掩码=掩码)中的错误:
承诺已在评估中:递归默认参数引用或早期问题? ”
浏览了 SO 上搜索词的所有点击,但目前没有任何效果。
非常感谢任何见解。谢谢你!
这是一个工作版本:
meta <- function(x, var, suffix){
new_name <- rlang::englue("{{ var }}_{{ suffix }}")
x %>%
mutate("{new_name}" := 5) %>%
mutate("{new_name}_new" := {{ var }} - .data[[new_name]])
}
names(meta(mtcars, mpg, suf))
#> [1] "mpg" "cyl" "disp" "hp"
#> [5] "drat" "wt" "qsec" "vs"
#> [9] "am" "gear" "carb" "mpg_suf"
#> [13] "mpg_suf_new"
要了解发生了什么:
-
了解之间的区别"{{ var }}"
and "{var}"
在 tidyeval 粘合字符串中:https://rlang.r-lib.org/reference/glue-operators.html
-
学习关于englue()
在 LHS 之外创建粘合字符串:=
: https://rlang.r-lib.org/reference/englue.html。这部分不是必需的,但我认为创建和重用变量会更好。
-
棘手的部分是,您创建一个具有构造名称的新列,然后想要使用该名称引用的新列。你必须将其子集化为.data
, see: https://rlang.r-lib.org/reference/dot-data.html
另请参阅一般主题:https://rlang.r-lib.org/reference/topic-data-mask-programming.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)