打电话"自我"在R函数中作为参数

时间:2014-11-14 15:56:34

标签: r function self

我想知道是否有一种优雅的呼唤方式" self"在R函数中。一个简单的例子是修改日期,让我们说a是int格式的日期(就像你从excel读取的那样)。

a = 41557
a = as.Date(a, origin = "1899-12-30")

然后" a"以适当的格式更新。显然这个例子非常简单,但是在长变量或更复杂的过程的情况下,人们希望使用像#34; self"这样的东西。 R中是否存在这样的东西。自我简单的意思是将变量放在=符号的左边部分。

a = 41557
a = as.Date(self, origin = "1899-12-30") # what to use for self. 

作为第一个提示,我发现(我认为)某些功能可以调用" self"以某种方式使用"< - "运营商,例如:

"minc<-" <- function(x, value){x*value}

给予:

a = 2
a = minc(12)
# a = 24, which is basically : a = self*12

我不知道R中是否存在这样的关键字,但它肯定有助于我的大部分代码的可读性。

一如既往,感谢您的帮助!

罗曼。

2 个答案:

答案 0 :(得分:2)

您正在寻找的功能是在精彩的magrittr包中实现的。 CRAN上的版本引入了一个管道运算符%>%,它将前面的内容作为其后面的第一个参数(默认情况下),或者用前面的语句替换.

更多关于你的问题,Github上的版本引入了许多管道变体,包括%<>%,它就像常规管道一样工作,但包括覆盖分配。

以下陈述是等效的(magrittr版本&gt; = 1.1.0,在Github上可用,devtools::install_github("smbache/magrittr")):

a = as.Date(a, origin = "1899-12-30")
a = a %>% as.Date(origin = "1899-12-30")
a %<>% as.Date(., origin = "1899-12-30")
a %<>% as.Date(origin = "1899-12-30")

答案 1 :(得分:1)

替换功能可以这样使用:

1)as.Date

"as.Date<-" <- function(x, value) as.Date(x, origin = value)

现在测试一下:

a <- 41557
as.Date(a) <- "1899-12-30"
a
## [1] 2013-10-10

2)minc

"minc<-" <- function(x, value) x * value

现在测试一下:

a <- 2
minc(a) <- 12
a
## [1] 24

注意:如果您愿意,可以使用self代替x

"as.Date<-" <- function(self, value) as.Date(self, origin = value)
"minc" <- function(self, value) self * value