我是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 Wickham和http://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相同的方式附加到向量?它看起来不像一个直接的类似交换。
答案 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]