r语言 - 使用冒号 (':') 访问数组中的元素 C++ (在 Rcpp 中)
r - Using colon (':') to access elements in an array in C++ (in Rcpp)
我正在尝试运行以下代码。坦率地说,我知道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
x1
不x
。我举的例子是微不足道的。我现在更新了示例。我需要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
:
Range idx(x, x1);
z = y[idx];
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 语言的哪一部分禁止更改 std::set 的元素
- C++ std::vector语言 - 如何修改迭代器指定的元素?
- r语言 - 使用冒号 (':') 访问数组中的元素 C++ (在 Rcpp 中)
- std::set with std::p air语言 - 如何为元素编写比较器
- 将函数应用于参数包的每个元素的语言功能
- 将vector语言 - c++中的old_value元素替换为new_value