使用冒号(':')在C++中访问数组中的元素(在Rcpp中)

我试图运行下面的代码。坦率地说,我只知道C++很少,但我想要得到以下函数运行。你能帮我运行这个愚蠢的例子吗?使用冒号(':')在C++中访问数组中的元素(在Rcpp中)

cppFunction(

'NumericVector abc(int x, int x_end, NumericVector y)

{

NumericVector z;

int x1 = x + x_end;

z = y[x:x1];

return(z);

}'

)

abc(3,c(0,1,10,100,1000,10000))

我看到这个...

错误:之前预计 ']' ':' 令牌

更新 对不起,我忘了提,我需要生成一个序列的数字从xx1。函数IntegerVector::create仅创建一个变量,只有xx1而不是x,尽管x1。我给的例子是微不足道的。我现在更新了这个例子。我需要在C++什么seq()在[R确实基于以下(@SleuthEye)

Rcpp::cppFunction(

'NumericVector abc(int x, int x_end, NumericVector y)

{

NumericVector z;

Range idx(x,x_end);

z = y[idx];

return(z);

}'

)

abc(3,5,c(0,1,10,100,1000,10000))

[1] 100 1000 10000

回答:

代码参数RcppcppFunction必须包括有效的C答案

解决方案做++码。该库试图尽可能无缝,但仍然限于C++的语法。更具体地说,C++没有范围运算符(:),相应地C++编译器会告诉您索引表达式必须是有效索引(包含在[]之内,不包含:)。索引的类型可以是intIntegerVector,但不能包含:字符。

为暗示在Rcpp subsetting article,可以然而创建代表所需(x,x+1)范围,然后可以用它来索引NumericVector变量作为这样的载体:

IntegerVector idx = IntegerVector::create(x, x+1); 

z = y[idx];

更一般地,可以使用在一个一个Range类似的方式:

Range idx(x, x1); 

z = y[idx];

以上是 使用冒号(':')在C++中访问数组中的元素(在Rcpp中) 的全部内容, 来源链接: utcz.com/qa/257518.html

回到顶部