使用冒号(':')在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))
我看到这个...
错误:之前预计 ']' ':' 令牌
更新 对不起,我忘了提,我需要生成一个序列的数字从x
到x1
。函数IntegerVector::create
仅创建一个变量,只有x
和x1
而不是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
回答:
代码参数Rcpp
的cppFunction
必须包括有效的C答案
解决方案做++码。该库试图尽可能无缝,但仍然限于C++的语法。更具体地说,C++没有范围运算符(:
),相应地C++编译器会告诉您索引表达式必须是有效索引(包含在[]
之内,不包含:
)。索引的类型可以是int
或IntegerVector
,但不能包含:
字符。
为暗示在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