gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:34 25 4
gpt4 key购买 nike

我正在尝试运行以下代码。坦率地说,我对 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))

我看到了这个...

错误:在“:”标记之前需要“]”

更新抱歉,我忘了说我需要生成一个从 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 中的建议,但是您可以创建一个 vector 来表示所需的 (x,x+1) 范围,然后您可以使用它来索引 NumericVector 变量:

IntegerVector idx = IntegerVector::create(x, x+1);
z = y[idx];

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

Range idx(x, x1);
z = y[idx];

关于c++ - 使用冒号 (':' ) 在 C++ 中访问数组中的元素(在 Rcpp 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com