11

私は一日中検索して答えを見つけることができないので、これがあまり明白ではないことを願っています。

次のRファイルがあるとします。

library(Rcpp)
sourceCpp("cfile.cpp")

giveOutput(c(1,2,3))

そして、次のC++ファイルをコンパイルします。

#include <Rcpp>
using namespace Rcpp;
// [[Rcpp::export]]

NumericVector plusTwo(NumericVector x){
  NumericVector out = x + 2.0;

  return out;
}

NumericVector giveOutput(NumericVector a){

NumericVector b = plusTwo(a);
return b;
}

私が何をしようとも、RcppプリプロセッサはplusTwo()利用可能になりますが、まったく利用できgiveOutput()ません。私が見つけたドキュメントには、これがパッケージを作成する必要があるポイントであると記載されていますが、パッケージビネットを読んだ後は、必要なものよりも桁違いに複雑に見えます。

plusTwo()内部を明示的に定義する以外にgiveOutput()、何ができますか?

4

1 に答える 1

15

エクスポートしたいすべての関数の前にexport属性を使用する必要があります。したがって、ファイルを次のように修正することによって

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericVector plusTwo(NumericVector x){
  NumericVector out = x + 2.0;
  return out;
}

// [[Rcpp::export]]
NumericVector giveOutput(NumericVector a){
  NumericVector b = plusTwo(a);
  return b;
}

私は望ましい振る舞いをします:

R> sourceCpp("/tmp/patrick.cpp")
R> giveOutput(1:3)
[1] 3 4 5
R> plusTwo(1:3)
[1] 3 4 5
R> 

ああ、パッケージの作成は呼び出すのと同じくらい簡単ですRcpp.package.skeleton()(ただし、特にattributes引数については、ヘルプページを読んでください)。私は、あなたがここから始めて、明らかに経由した方法を開始した少なくとも1つのCRANパッケージを知っていRcpp.package.skeleton()ます...

于 2013-02-03T00:00:20.717 に答える