使用在Rcpp

时间:2017-07-03 19:02:23

标签: r rcpp

我在文件 add.cpp 中定义了一个名为add的c ++函数(下面是 add.cpp 的内容):

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double add(double a, double b) {
  return a + b;
}

我在 multiplyandadd.cpp 文件(下面的 multiplyandadd.cpp 的内容)中定义了另一个名为multiplyandadd的c ++函数,该函数调用add函数从上面:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double multiplyandadd(double a, double b, double c) {
  return c*add(a, b);
}

为了实现这一点,我发现我应该在我的包的子文件夹 / inst / include 中创建一个头文件 add.h 并定义function {{ 1}}在 add.h ...

add.h 的内容应该是什么?如何在 add.h 中定义此函数add以便包编译?

我确信这是非常基本的,可能之前已经回答了很多次,并且有大量的例子记录得非常好......我只是在几个小时内找不到一个例子来阅读文档,stackoverflow答案,。 ..

2 个答案:

答案 0 :(得分:1)

使用标题时,您需要使用inclusion guard。在包含守卫内,提供适当的功能定义。如果您的函数具有默认参数,请在头文件中包含默认参数

例如:

<强>安装/包含/ add.h

<div class="ui right labeled top pointing floating icon button dropdown">
    <i class="icon folder open"></i>
    <span class="text" tabindex="0" role="menu">Menu</span>
    <div class="menu">
        <div class="item" (click)="onClickItem()" *ngFor="#m of menu">
            <i class="icon sign in"></i>
            {{m}}
        </div>
    </div>
</div>

<强>的src / add.cpp

#ifndef PACKAGENAME_ADD_H
#define PACKAGENAME_ADD_H

double add(double a = 0.1, double b = 0.2);

#endif

<强>的src / multiplyandadd.cpp

#include <Rcpp.h>
#include <add.h>

// [[Rcpp::export]]
double add(double a, double b) {
  return a + b;
}

<强>的src / Makevars

#include <Rcpp.h>
#include <add.h>

// [[Rcpp::export]]
double multiplyandadd(double a, double b, double c) {
  return c*add(a, b);
}

答案 1 :(得分:0)

行。弄清楚......:)

add.h:

//add.h

#ifndef __ADD_H_INCLUDED__   // if add.h hasn't been included yet...
#define __ADD_H_INCLUDED__   //   #define this so the compiler knows it has been included

double add(double a, double b);

#endif

而且,我需要src中的Makevars内容:

PKG_CXXFLAGS = -I../inst/include

我知道这是最基本的事情。在某个地方拥有这样一个基本的例子可以让人们第一次使用Rcpp更容易。