我正在尝试运行以下代码。坦白地说,我对C ++的了解很少,但是我想运行以下函数。您能帮我运行这个愚蠢的例子吗?
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子集文章中所建议的那样,您可以创建一个代表所需(x,x+1)
范围的向量,然后将其用于索引NumericVector
变量,如下所示:
IntegerVector idx = IntegerVector::create(x, x+1);
z = y[idx];
通常,您可以Range
类似的方式使用a :
Range idx(x, x1);
z = y[idx];
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句