如何在 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'
我用一些 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'