r - 如何在 R 库中制作不可见的函数
问题描述
我做了一个带有一些 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++ 代码中调用a()
,b()
但只能b
作为 R 中的函数使用。
如果您希望能够a()
在包内部用作 R 函数,但希望对最终用户隐藏它,则需要使用以句点开头的名称导出它,因此// [[Rcpp::export]]
您可以键入// [[Rcpp::export(.a)]]
. 现在您将能够.a()
在您的包的 R 代码中用作函数,但它将对您的包的最终用户隐藏。
#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'
推荐阅读
- php - 在PHP中仅验证数组整数
- python-3.x - 将许多目录提交到 git 包,删除它们,但 python setup.py 仍然认为它们在那里
- sql - 使用我指定的日期列创建查询,但无法创建临时表
- reactjs - 我在 React JS 中的 Router 元素有什么问题?
- python - 本地网络摄像头和网络应用网络摄像头中不同的 OpenCV 增强输出
- javascript - 如何在没有用户与之交互的情况下完全停止播放视频?
- google-bigquery - 为什么 BigQuery 不接受 BYTES 列中的原始字节?
- vb.net - 如何使用 Firesharp 将 DateTime 存储到实时 Firebase 中?#VB.NET
- swift - 在 SceneKit 中将节点方向从一个父级转换为另一个父级
- asp.net-core - 使用 SAML2.0 模拟 ControllerBase.HttpContext.AuthenicateAsync() 以返回成功