我正在构建一个R包并且有一个我要声明的常量wjtConstant
。我希望这个常量可以为我为包创建的R函数和.cpp函数访问
对于R函数,我可以用一行创建一个.R文件:wjtConstant = 5
并将此文件放在" R"包开发的文件夹。
对于cpp函数,我可以将以下行放在" inst / include"中的头文件中。文件夹:const int wjtConstant = 5;
我可以在两个地方声明常量,并且结果可以根据需要工作(即,常量可以由R和cpp函数使用),但这感觉很邋..有没有办法声明常量一次,并且可以同时访问R函数和cpp函数吗?
答案 0 :(得分:2)
您可以在R中使用活动绑定来调用C ++函数。像这样:
#include <Rcpp.h>
using namespace Rcpp ;
const int wjtConstant = 5;
// [[Rcpp::export]]
int get_wjtConstant(){ return wjtConstant ; }
在R:
> makeActiveBinding("wjtConstant", get_wjtConstant, environment() )
> wjtConstant
[1] 5
这样你就可以在R和C ++中直接使用wjtConstant
。
答案 1 :(得分:1)
这是一个简单的例子:
#include <Rcpp.h>
const int theAnswer = 42;
// [[Rcpp::export]]
int getAnswer() {
return theAnswer;
}
// [[Rcpp::export]]
void callAnswer() {
Rcpp::Rcout << "Accessing Answer in C++: " << theAnswer << std::endl;
}
/*** R
cat("The answer is ", getAnswer(), "\n")
cat("Calling code accessing answer\n")
callAnswer()
*/
产生:
R> Rcpp::sourceCpp("/tmp/constEx.cpp")
R> cat("The answer is ", getAnswer(), "\n")
The answer is 42
R> cat("Calling code accessing answer\n")
Calling code accessing answer
R> callAnswer()
Accessing Answer in C++: 42
R>
对于真正的解决方案,您将获得一个获取源的常量 来自R accessor包以及C ++使用者。我有预测系统使用这样的方案来简化/自动化参数更新。
答案 2 :(得分:0)
混合语言时,将常量或配置数据放入文件是一个简单的解决方案。该文件还允许在不重建源文件的情况下更改数据。
使用配置或数据文件时,文件的位置位于应用程序具有读取权限的文件夹中。
文件可以是任何格式,但文本格式对于使用文本编辑器进行修改很有用。二进制格式更难修改。