R调用C++示例

sourceCpp {Rcpp}:Source C++ Code from a File or String

sourceCpp(file = "", code = NULL, env = globalenv(), embeddedR = TRUE, rebuild = FALSE,
  cacheDir = getOption("rcpp.cache.dir", tempdir()), cleanupCacheDir = FALSE,
  showOutput = verbose, verbose = getOption("verbose"), dryRun = FALSE)

file:给出文件路径名的字符串。

code:带有源代码的字符串。如果提供,代码将从该字符串而不是文件中获取。

env:应该提供R函数和模块的环境。

embeddedR:TRUE表示运行嵌入的R代码块。

示例1:斐波那契数列

sourceCpp(code='
  #include <Rcpp.h>

  // [[Rcpp::export]]
  int fibonacci(const int x) {
    if (x == 0) return(0);
    if (x == 1) return(1);
    return (fibonacci(x - 1)) + fibonacci(x - 2);
  }'
)
> for(i in 0:10)
+ {
+     print(fibonacci(i))
+ }
[1] 0
[1] 1
[1] 1
[1] 2
[1] 3
[1] 5
[1] 8
[1] 13
[1] 21
[1] 34
[1] 55

示例2:正弦查表

#include <Rcpp.h>
using namespace Rcpp;
//sin_C.cpp
// [[Rcpp::export]]
int sin_C(int x) {
  //正弦查表
  //输入x范围1~256
  int sin_rom[]={128, 131, 134, 137, 140, 143, 146, 149, 
                 152, 156, 159, 162, 165, 168, 171, 174, 
                 176, 179, 182, 185, 188, 191, 193, 196, 
                 199, 201, 204, 206, 209, 211, 213, 216, 
                 218, 220, 222, 224, 226, 228, 230, 232, 
                 234, 236, 237, 239, 240, 242, 243, 245, 
                 246, 247, 248, 249, 250, 251, 252, 252, 
                 253, 254, 254, 255, 255, 255, 255, 255};
  int y;
  if(x<=64)
    y=sin_rom[x-1];
  else if(x<=128)
    y=sin_rom[128-x];
  else if(x<=192)
    y=255-sin_rom[x-129];
  else
    y=255-sin_rom[256-x];
  return y;
}

/*** R
x<-y<-1:256
for(i in 1:256)
{
  y[i]<-sin_C(x[i])
}
plot(x,y,type="l")
*/
Rcpp::sourceCpp('sin_C.cpp')

原文地址:https://www.cnblogs.com/dingdangsunny/p/12485004.html