将R代码转换为Rcpp - 用于循环,向量输入,向量输出

时间:2018-03-25 13:07:28

标签: r rcpp

我是Rcpp和C ++的初学者。如果我能看到一个与我的背景相关的工作实例,它可能对我的旅程有所帮助。

让我们采用以下R代码:

value <-c(0.2,0.3,0.4,0.5,0.6,-2.0,0.7,0.4,-10,0.1,0.2,0.4,3.0,0.6,0.7,0.8,-1.2,0.6,0.7,0.8,0.3,0.5,2,0.1,0.2)
res <- NULL
while (length(res) < length(value)) {
  if (value[length(res)+1] < -1) {
    res <- c(res, rep(1,5))
  } else {
    res <- c(res, 0)
  }
}

带数值输出:

> str(res)
 num [1:25] 0 0 0 0 0 1 1 1 1 1 ...

代码是一个for循环,找到< -1的实例,然后追加一个带有rep 1,5次的向量,如果不是-1则为0.

接下来我希望将其发送给Rcpp:

我在这里关注一些例子:

Hadley Wickhamhttp://dirk.eddelbuettel.com

我的转化尝试如下:

cppFunction('double resC(NumericVector x) {
  int n = x.size();
            double res = 0;
            for(int i = ; i < n; ++i) {
  if (value[i] < -1) { 
  res += c(res, rep(1,5));
  } else {
    res += c(res, 0);
  }         
            return res;
            }')


resC(value)

C ++能否以与R相同的方式附加到向量?它看起来不像一个直接的类似交换。

1 个答案:

答案 0 :(得分:0)

我选择在Julia中编写代码

逻辑同样只是将卷曲的R括号放在:

signal = [0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ]

n_day = zeros(signal)
i = 1
j = 1
for i in 1:length(signal)
if signal[i] == 1
    n_day[i] = 1
    j = 1
    print("i =", i)
while(j<=4)
  # Carry over index position
        n = i + j  # carry over index position
    n_day[n] = 1
    j = j + 1
end
j=1
n=1
end
end
输出

julia> print(n_day)
[0 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0]