library(magrittr)
x <- 2
x %<>%
add(3) %>%
subtract(1)
x
是否有预定义的更易读的方式可以使用管道?
也许像x %+=% 3 %-=% 1
答案 0 :(得分:5)
没有
增加操作符很容易:
%+=% <- function (x, inc) x + inc
%-=% <- function (x, dec) x - dec
但是,这些函数不会直接修改x
,因为R会非常努力地阻止函数修改其范围之外的变量。也就是说,您仍然需要编写x <- x %+=% 1
来实际更新x
。
包inc<-
中的dec<-
和Hmisc
函数可以解决此限制。因此,您可能会惊讶地发现inc<-
的定义只是:
function (x, value)
{
x + value
}
也就是说,函数内部的代码与我们的自定义%+=%
运算符中的代码完全相同。神奇的发生是因为R解析器中的一个特殊功能,它解释了
inc(x) <- 1
作为
x <- `inc<-`(x, 1)
这就是你能够做names(iris) <- letters[length(iris)]
之类的事情。
%<>%
很神奇,因为它会在其范围之外修改x
。它也非常反对R的编码范式*。因此,所需的机器很复杂。要按照您的方式实施%+=%
,您需要对%<>%
进行反向工程。不过,可能值得在GitHub上提出功能请求。
*除非您是data.table
用户,否则无论如何都不会对您抱有希望。