R Language
Rcpp
サーチ…
インラインコードコンパイル
Rcppには、インラインでコードをコンパイルし、R: cppFunction()
とevalCpp()
直接cppFunction()
できる2つの関数があります。呼ばれる第3の関数sourceCpp()
ただしに似用いることができる別のファイル内のC ++コードで読み取るために存在cppFunction()
以下は、 R内のC ++関数をコンパイルする例です。ソースを囲むために""
を使用することに注意してください。
# Note - This is R code.
# cppFunction in Rcpp allows for rapid testing.
require(Rcpp)
# Creates a function that multiples each element in a vector
# Returns the modified vector.
cppFunction("
NumericVector exfun(NumericVector x, int i){
x = x*i;
return x;
}")
# Calling function in R
exfun(1:5, 3)
C ++式の使い方をすばやく理解するには:
# Use evalCpp to evaluate C++ expressions
evalCpp("std::numeric_limits<double>::max()")
## [1] 1.797693e+308
Rcppの属性
Rcpp Attributesは、RおよびC ++での作業のプロセスを簡単にします。属性の形式は次のとおりです。
// [[Rcpp::attribute]]
属性の使用は、通常、次のものと関連しています。
// [[Rcpp::export]]
sourceCpp()
介してC ++ファイルをsourceCpp()
ときに宣言された関数ヘッダーの直上に配置されます。
以下は、属性を使用する外部C ++ファイルの例です。
// Add code below into C++ file Rcpp_example.cpp
#include <Rcpp.h>
using namespace Rcpp;
// Place the export tag right above function declaration.
// [[Rcpp::export]]
double muRcpp(NumericVector x){
int n = x.size(); // Size of vector
double sum = 0; // Sum value
// For loop, note cpp index shift to 0
for(int i = 0; i < n; i++){
// Shorthand for sum = sum + x[i]
sum += x[i];
}
return sum/n; // Obtain and return the Mean
}
// Place dependent functions above call or
// declare the function definition with:
double muRcpp(NumericVector x);
// [[Rcpp::export]]
double varRcpp(NumericVector x, bool bias = true){
// Calculate the mean using C++ function
double mean = muRcpp(x);
double sum = 0;
int n = x.size();
for(int i = 0; i < n; i++){
sum += pow(x[i] - mean, 2.0); // Square
}
return sum/(n-bias); // Return variance
}
R内でこの外部C ++ファイルを使用するには、次の操作を行います。
require(Rcpp)
# Compile File
sourceCpp("path/to/file/Rcpp_example.cpp")
# Make some sample data
x = 1:5
all.equal(muRcpp(x), mean(x))
## TRUE
all.equal(varRcpp(x), var(x))
## TRUE
プラグインによるRcppの拡張
C ++では、次のように異なるコンパイルフラグを設定できます。
// [[Rcpp::plugins(name)]]
組み込みのプラグインのリスト:
// built-in C++11 plugin
// [[Rcpp::plugins(cpp11)]]
// built-in C++11 plugin for older g++ compiler
// [[Rcpp::plugins(cpp0x)]]
// built-in C++14 plugin for C++14 standard
// [[Rcpp::plugins(cpp14)]]
// built-in C++1y plugin for C++14 and C++17 standard under development
// [[Rcpp::plugins(cpp1y)]]
// built-in OpenMP++11 plugin
// [[Rcpp::plugins(openmp)]]
追加の依存関係の指定
Rcppエコシステムの中に追加のパッケージを使用するには、正しいヘッダファイルがないかもしれませんRcpp.h
が、 Rcpp<PACKAGE>.h
用などとしてRcppArmadillo )。通常はインポートする必要があります。
// [[Rcpp::depends(Rcpp<PACKAGE>)]]
例:
// Use the RcppArmadillo package
// Requires different header file from Rcpp.h
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// Use the RcppEigen package
// Requires different header file from Rcpp.h
#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow