使用Rcpp :: export重命名导出的函数在特定安装上失败

时间:2013-04-03 09:22:15

标签: r rcpp

导出具有不同名称的Rcpp函数在一台计算机上成功但在另一台计算机上失败。 R环境非常相似。我做错了什么?

详细

我有一个带有Rcpp函数的R包,该函数使用以下签名导出(在sample_int_crank.cpp中):

// [[Rcpp::export(sample.int.crank)]]
IntegerVector sample_int_crank(int n, int size, NumericVector prob) {
    ...

此函数在相应的R文件(sample_int_crank.R)中声明为空:

sample.int.crank <- function(n, size, prob) {
}

编辑:当我删除此R文件时,该功能可用。但是我在哪里为此函数放置roxygen2注释?

现在,当我从GitHub安装软件包时,

library(devtools)
install_github('wrswoR', 'muelleki', '0.0.6')

在机器 A 上说:

> sample.int.crank
internal C++ function <0x29ddc40>
    signature : Rcpp::IntegerVector sample.int.crank(int, int, Rcpp::NumericVector)

并在机器上 B

> sample.int.crank
function(n, size, prob) {
}
<environment: namespace:wrswoR>

编辑:如果从包中删除sample_int_crank.R,则输出看起来不同,但在 A B 上相同。这是怎么回事?

library(devtools)
install_github('wrswoR', 'muelleki')

> sample.int.crank
function (n, size, prob) 
{
    .Call("wrswoR_sample_int_crank", PACKAGE = "wrswoR", n, size, 
        prob)
}
<environment: namespace:wrswoR>

sessionInfo()似乎或多或少相同,至少对于R和Rcpp而言 - A

> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

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

other attached packages:
[1] wrswoR_0.0.6    logging_0.7-102 Rcpp_0.10.3     devtools_0.8   

loaded via a namespace (and not attached):
 [1] digest_0.5.2    evaluate_0.4.2  httr_0.1.1      memoise_0.1    
 [5] parallel_2.15.3 plyr_1.7.1.99.2 RCurl_1.95-0    stringr_0.6.1  
 [9] tools_2.15.3    whisker_0.1    

> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.utf-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.utf-8        LC_COLLATE=en_US.utf-8
 [5] LC_MONETARY=en_US.utf-8    LC_MESSAGES=en_US.utf-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.utf-8 LC_IDENTIFICATION=C

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

other attached packages:
[1] wrswoR_0.0.6   logging_0.6-92 Rcpp_0.10.3    devtools_1.1

loaded via a namespace (and not attached):
[1] digest_0.6.3    evaluate_0.4.3  httr_0.2        memoise_0.1
[5] parallel_2.15.3 RCurl_1.95-4.1  stringr_0.6.2   tools_2.15.3
[9] whisker_0.1

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

关于你的问题

  

但是我在哪里为这个函数放置roxygen2注释?

我不得不让你失望的是,这里只是没有支持Rcpp属性中的roxygen(2)。也许你想贡献那个?

另一方面,在src/中编写普通的C ++函数并从正常的R函数调用它们当然是受支持的,并且可以被roxygen2使用就好了。

关于devtools对你的包装做了什么:也不知道。 Romain和我自己都不使用devtools,因此你处于无证件和未定义的领域。