我用一些Cpp函数做一个R库,我用Rcpp.package.skeleton()做。 在同一个Cpp文件中,我具有更多功能。 有没有一种方法可以使我无法使用的功能不可见?
例如我有:
#include <Rcpp.h>
// [[Rcpp::export]]
int a (int x){
return x+2;
}
// [[Rcpp::export]]
int b(int y){
z=a(y);
return(z);
}
我只想调用“ b”函数。
我使用Rcpp骨架制作包裹,如果我执行R CMD检查,警告提示告诉我:
Undocumented code objects:'a'
因为我只为函数“ b”做文档。
有没有一种方法可以做到这一点?在RStudio中,当我编写要编写的功能的功能预览时出现,并且我不希望功能“ a”使用它,而只希望功能“ b”使用
答案 0 :(得分:4)
如果仅打算在C ++代码中使用C ++函数,则根本不需要使用// [[Rcpp::export]]
行的第一个实例。这样,您仍然可以从C ++代码中的a()
内调用b()
,但是在R中只有b
可以作为函数使用。
如果您希望能够在包内部将a()
用作R函数,但希望对最终用户隐藏它,则需要使用以句点开头的名称导出它,因此您可以输入// [[Rcpp::export]]
而不是// [[Rcpp::export(.a)]]
。现在,您可以在包的R代码中使用.a()
作为函数了,但是对包的最终用户来说是隐藏的。
#include <Rcpp.h>
// [[Rcpp::export(.a)]]
int a (int x){
return x+2;
}
// [[Rcpp::export]]
int b(int y){
z = a(y);
return(z);
}
现在,在R中,您可以执行以下操作:
> library(MatteosPackage)
> b(1)
[1] 3
>.a(1)
Error in .a(1) : could not find function ".a"
> MatteosPackage::.a(1)
Error: '.a' is not an exported object from 'namespace:MatteosPackage'