2017-02-22 22 views
4

我是新來的與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

NAMESPACE文件的內容是什麼? (至少從性能的角度來說,重載'+'是一個糟糕的主意。) – Roland

+0

你導出了這個函數嗎? – Axeman

+0

嗨, @Roland我的NAMESPACE文件只有:exportPattern(「^ [[:alpha:]] +」) – Courvoisier

回答

3

OP表示他們使用exportPattern("^[[:alpha:]]+")導出函數,即指定使用正則表達式導出函數。好了,正則表達式不匹配"+"

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

寫作R附加recommends以下導出一切不能以點開始:

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

測試正則表達式:

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

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

+1

這起作用。謝謝。我將不得不在一些時候通過「Writing R Extensions」 – Courvoisier

+0

如果你打算創建軟件包(你應該),你需要經常諮詢它。這是官方文件。不要在其他教程中打擾太多。他們經常過時。 – Roland