Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+调用R函数+;,使用Rcpp_R_Inline_Rcpp - Fatal编程技术网

从C+调用R函数+;,使用Rcpp

从C+调用R函数+;,使用Rcpp,r,inline,rcpp,R,Inline,Rcpp,我在自学Rcpp,注意到Rcpp sugar没有示例函数。 所以我决定在C++中调用库中的示例函数。 我有两个问题: 一,。 关于参数prob的类型,我应该使用数值向量吗? 使用向量类型是合法的吗 二,。 关于输出的类型,我应该使用IntegerVector吗? 使用NumericVector类型合法吗 看起来所有这些类型都很好(见下面的代码),但我想知道哪种类型更适合使用 <!-- language-all: lang-html --> library(inline) librar

我在自学Rcpp,注意到Rcpp sugar没有示例函数。 所以我决定在C++中调用库中的示例函数。 我有两个问题:

一,。 关于参数prob的类型,我应该使用数值向量吗? 使用向量类型是合法的吗

二,。 关于输出的类型,我应该使用IntegerVector吗? 使用NumericVector类型合法吗

看起来所有这些类型都很好(见下面的代码),但我想知道哪种类型更适合使用

<!-- language-all: lang-html -->
library(inline)
library(Rcpp)

src1 <- '
   RNGScope scope;

  NumericVector thenum(1),myprob(3);

  myprob[0]=0.1;
  myprob[1]=0.5;
  myprob[2]=0.4;

  Environment base("package:base");
  Function sample = base["sample"];

  thenum = sample(3,Named("size",1),Named("prob",myprob));

  return wrap(thenum);
'


src2 <- '
  RNGScope scope;

  IntegerVector theint(1);
  vector<double> myprob(3);
    myprob[0]=0.1;
  myprob[1]=0.5;
  myprob[2]=0.4;
  Environment base("package:base");
  Function sample = base["sample"];

  theint = sample(3,Named("size",1),Named("prob",myprob));

  return wrap(theint);
'


fun1 <- cxxfunction(signature(),body=src1,plugin="Rcpp")
fun2 <- cxxfunction(signature(),body=src2,include='using namespace std;',plugin="Rcpp")

fun1() ## work!
fun2() ## oh this works too! 

库(内联)
图书馆(Rcpp)

src1因为您正在从R调用
sample()
,所以整数和数字的工作原理与它们在R中的工作原理相同:


很荣幸,欢迎来到StackOverflow。这里常见的做法是:a通过点击向上箭头“向上投票”回答,b通过点击您看到的勾号“接受”回答(有人问过)。
R> set.seed(42); sample(seq(1L, 5L), 5, replace=TRUE)
[1] 5 5 2 5 4
R> set.seed(42); sample(seq(1.0, 5.0), 5, replace=TRUE)
[1] 5 5 2 5 4
R>