如何在 R 库中创建不可见函数

How to make invisible functions in R library

我用一些 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"

如果您只打算在 C++ 代码中使用 C++ 函数,则根本不需要使用 // [[Rcpp::export]] 行的第一个实例。这样您仍然可以在 C++ 代码中从 b() 中调用 a(),但只有 b 可以作为 R 中的函数使用。

如果您希望能够在包内部使用 a() 作为 R 函数,但又想对最终用户隐藏它,您需要使用以句点开头的名称导出它,因此您可以输入 // [[Rcpp::export(.a)]] 而不是 // [[Rcpp::export]]。现在,您将能够在包的 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'