考虑
library(dplyr)
assign_rhs <- function(df, rhs) {
df %>%
mutate(lhs = {{rhs}})
}
a = data.frame(b = 1, c = 2)
assign_rhs(a, b)
将产生:
b c lhs
1 1 2 1
而且我也可以assign_rhs(a, c)
分配lhs
给c
而不是b
。
我该如何做才能使他们lhs
也能接受所{{}}
提供的NSE治疗{rlang}
?
我试过了
library(dplyr)
assign_lhs_rhs <- function(df, lhs, rhs) {
df %>%
mutate({{lhs}} = {{rhs}})
}
a = data.frame(b = 1, c = 2)
assign_lhs_rhs(lhs, b)
但是定义函数时出现错误
Error: unexpected '=' in:
" df %>%
mutate({{lhs}} ="
如果使用:=
代替,则=
可以在作业的左侧使用NSE:
assign_lhs_rhs <- function(df, lhs, rhs) {
df %>%
mutate({{lhs}} := {{rhs}})
}
a = data.frame(b = 1, c = 2)
assign_lhs_rhs(a, out, b)
输出:
b c out
1 1 2 1
我不是非标准评估专家,但据我所知,其原因是无法覆盖=
工作方式,因此必须通过新的运算符来完成:=
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句