R Language
Rcpp
수색…
인라인 코드 컴파일
Rcpp에는 코드 컴파일을 인라인하고 R : cppFunction()
및 evalCpp()
직접 내보낼 수있는 두 가지 기능이 있습니다. 라는 제 기능 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 속성은 R 및 C ++로 작업하는 프로세스를 간단하게 만듭니다. 속성의 형식은 다음과 같습니다.
// [[Rcpp::attribute]]
속성의 사용은 일반적으로 다음과 관련됩니다.
// [[Rcpp::export]]
sourceCpp()
를 통해 C ++ 파일을 읽을 때 선언 된 함수 헤더 바로 위에 위치합니다.
아래는 속성을 사용하는 외부 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