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

状态R

我正在尝试运行以下代码。坦白地说,我对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只与只创建一个变量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子集文章中所建议的那样,您可以创建一个代表所需(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C中访问数组元素

在C ++中在类名后面使用冒号

在C中使用Divide and Conquer查找数组中的多数元素

在C ++中使用STL在数组中查找最小元素

在Perl 6中的方法和函数调用中使用冒号

C ++访问结构中的结构数组的元素

c - 如何在c中访问数组内的数组元素?

在css html中使用冒号从多个div类中获取元素

无法使用键访问数组中的元素

使用存储在数组元素中的变量访问数组元素

为什么Objective-C数组参数不使用冒号?

在 C# 中使用十进制值访问 List<string> 中的元素

在 C 中使用数组(输出中的错误)

在C中的数组定义中使用宏

如何在 C++ 中访问向量中的数组元素?

CGO:如何在Golang中使用指针从C中的数组访问数据

在c#中使用“Regex”检查字符串数组中是否存在元素

使用指针访问struct c ++向量中的元素

如何使用JNI访问C ++中Java类的元素

在C中访问数组

C ++的双冒号在类名之后而不是名称空间中使用

使用指针表示法在C中访问多维数组

在其他c ++函数中使用c ++函数(在带有Rcpp的R Package中)

在c ++中,是否可以像Numpy中的ndarray一样实现使用语法[i,j,...]访问数组元素的功能?

在C中访问数组的-1元素

在C数组线程中访问不同元素是否安全?

在 PowerShell 中从 C# 访问固定大小的数组元素

在 C++ 中返回数组返回不可访问的元素

通过发送元素 C# 访问方法中的数组