使用重载运算符构建包
build package with overloaded operator
我是使用 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
OP 表示他们使用 exportPattern("^[[:alpha:]]+")
导出函数,即使用正则表达式指定要导出的函数。嗯,那个正则表达式不匹配 "+"
:
grepl("^[[:alpha:]]+", "+")
#[1] FALSE
编写 R 扩展 recommends 导出不以点开头的所有内容:
exportPattern("^[^\.]")
正在测试正则表达式:
grepl("^[^\.]", "+")
#[1] TRUE
请注意,使用 export
导出特定函数是更好的做法。
我是使用 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
OP 表示他们使用 exportPattern("^[[:alpha:]]+")
导出函数,即使用正则表达式指定要导出的函数。嗯,那个正则表达式不匹配 "+"
:
grepl("^[[:alpha:]]+", "+")
#[1] FALSE
编写 R 扩展 recommends 导出不以点开头的所有内容:
exportPattern("^[^\.]")
正在测试正则表达式:
grepl("^[^\.]", "+")
#[1] TRUE
请注意,使用 export
导出特定函数是更好的做法。