在构建R包时从另一个Rcpp函数调用Rcpp函数

在构建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

我从另一个问题中选取了这个例子。我正在用Rcpp构建一个R包。我有一个类似于
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);
}