使用重载运算符构建包

时间:2017-02-22 13:27:51

标签: r devtools

我刚开始使用R构建软件包,我开始创建一个包含我编写的函数的软件包,并且经常独立加载。在这些函数中,有一个重载+运算符用于连接字符串。这很简单:

`+` = function(x,y) {
    if(is.character(x) | is.character(y)) {
        return(paste(x , y, sep=""))
    } else {
        .Primitive("+")(x,y)
    }
}

我在Rstudio中构建包并且包编译,我可以加载它。但是当我加载它时,包中缺少+运算符。我错过了什么?

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] TBKUseful_0.1.0

loaded via a namespace (and not attached):
[1] tools_3.3.2     withr_1.0.2     memoise_1.0.0   digest_0.6.12   devtools_1.12.0

1 个答案:

答案 0 :(得分:3)

OP已经表示他们使用exportPattern("^[[:alpha:]]+")导出函数,即指定使用正则表达式导出的函数。好吧,那个正则表达式与"+"不匹配:

grepl("^[[:alpha:]]+", "+")
#[1] FALSE

编写R扩展程序 recommends以下内容导出所有不以点开头的内容:

exportPattern("^[^\\.]")

测试正则表达式:

grepl("^[^\\.]", "+")
#[1] TRUE

请注意,使用export导出特定功能是更好的做法。