在 R 4.1 中引入了一个本地管道运算符,它比以前的实现“更加精简”。我已经注意到 native|>和 magrittr pipe之间的一个区别%>%,即2 %>% sqrt可以工作但2 |> sqrt不能,并且必须写为2 |> sqrt(). 使用新的管道运算符时是否有更多差异和陷阱需要注意?
我正在使用@Konrad Rudolph的函数,但将其名称从 更改%>%为:=,并获得相同的调用不同的结果。
`%>%` = function (lhs, rhs) {
subst = call('substitute', substitute(rhs), list(. = lhs))
eval.parent(eval(subst))
}
`:=` <- `%>%`
1 %>% .+2 %>% .*3
#[1] 7
1 := .+2 := .*3
#[1] 3
Run Code Online (Sandbox Code Playgroud)
或者具有不同的功能。
`%>%` <- function(lhs, rhs) {
assign(".", lhs, envir=parent.frame())
eval(substitute(rhs), parent.frame())
}
`:=` <- `%>%`
1 %>% .+2 %>% .*3
#[1] 7
1 := .+2 := .*3
#[1] 9
Run Code Online (Sandbox Code Playgroud)
为什么使用名为 的函数时会得到其他结果:=?