在构建R包时从另一个Rcpp函数调用Rcpp函数
我从另一个问题中选取了这个例子。我正在用Rcpp构建一个R包。我有一个类似于在构建R包时从另一个Rcpp函数调用Rcpp函数,r,function,include,package,rcpp,R,Function,Include,Package,Rcpp,我从另一个问题中选取了这个例子。我正在用Rcpp构建一个R包。我有一个类似于fun1(如下)的函数,我想将其放入自己的.cpp文件中。然后我想用其他函数调用fun1(比如下面的fun()does)。我希望fun1在一个单独的文件中,因为我将从不同.cpp文件中的几个Rcpp函数调用它。在.cpp的fun()所在的fun1函数中,是否有某些include语句和需要执行的操作?多谢各位 library(inline) library(Rcpp) a = 1:10 cpp.fun = cxxfunct
fun1
(如下)的函数,我想将其放入自己的.cpp
文件中。然后我想用其他函数调用fun1
(比如下面的fun()
does)。我希望fun1
在一个单独的文件中,因为我将从不同.cpp
文件中的几个Rcpp函数调用它。在.cpp
的fun()
所在的fun1
函数中,是否有某些include语句和需要执行的操作?多谢各位
library(inline)
library(Rcpp)
a = 1:10
cpp.fun = cxxfunction(signature(data1="numeric"),
plugin="Rcpp",
body="
int fun1( int a1)
{int b1 = a1;
b1 = b1*b1;
return(b1);
}
NumericVector fun_data = data1;
int n = data1.size();
for(i=0;i<n;i++){
fun_data[i] = fun1(fun_data[i]);
}
return(fun_data);
")
和第二个.cpp
文件:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int fun1( int a1)
{int b1 = a1;
b1 = b1*b1;
return(b1);
}
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int fun1(int a1)
{int b1=a1;
b1=b1*b1;
返回(b1);
}
两种可能的解决方案:
“快速脏”解决方案——在使用函数的文件中包含函数声明:
#include <Rcpp.h>
using namespace Rcpp;
// declare fun1
int fun1(int a1);
// [[Rcpp::export]]
Rcpp::NumericVector fun(Rcpp::NumericVector data1)
{
NumericVector fun_data = data1;
int n = data1.size();
for(i=0;i<n;i++){
fun_data[i] = fun1(fun_data[i]);
}
return(fun_data);
}
然后您可以将其与以下内容一起使用:
#include <Rcpp.h>
#include "fun1.h"
using namespace Rcpp;
// [[Rcpp::export]]
Rcpp::NumericVector fun(Rcpp::NumericVector data1)
{
NumericVector fun_data = data1;
int n = data1.size();
for(i=0;i<n;i++){
fun_data[i] = fun1(fun_data[i]);
}
return(fun_data);
}
#包括
#包括“fun1.h”
使用名称空间Rcpp;
//[[Rcpp::导出]]
Rcpp::NumericVector乐趣(Rcpp::NumericVector数据1)
{
NumericVector fun_数据=数据1;
int n=data1.size();
对于(i=0;这是C++的基本用法),与RCPP无关。学习使用一个公共的头文件,它是任何适当的C++(甚至C)。书将涵盖。感谢你的明确答案,这是完美的。在此之前我不知道。H文件与RCPP一起工作或放在哪里。我有一年的C++课程,所以大部分RCPP文档仍然是不可访问的。但是RCPP对于MCMC来说是惊人的。
#ifndef PKG_FOO1_H
#define PKG_FOO1_H
int foo(int);
#endif
#include <Rcpp.h>
#include "fun1.h"
using namespace Rcpp;
// [[Rcpp::export]]
Rcpp::NumericVector fun(Rcpp::NumericVector data1)
{
NumericVector fun_data = data1;
int n = data1.size();
for(i=0;i<n;i++){
fun_data[i] = fun1(fun_data[i]);
}
return(fun_data);
}