我在C中有以下代码。我是Rcpp的新手,我想将我拥有的C代码转换为Rcpp。
C代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void calculate(const double *d, double *w, int col, int x) {
int i,j;
for (i = 0; i < col; i++){
for (j = 0; j < x; j++){
w[j * col + i]++;
}
}
}
int main(){
int i, col = 2, row = 6;
int x = 5, y = 3, a = 0;
double d[] = {1.0, 0.8, 0.2, 1.0, 0.4, 0.6, 0.6, 0.4, 0.8, 1.0, 1.0, 0.2};
double *w = (double*)calloc((row - a) * col * x, sizeof(double));
for (i = 0; i < row - a; i++) {
calculate(d + (i + a) * col, w + i * col * x, col, x);
}
}
Rcpp代码:
NumericVector calculate(NumericVector d, NumericVector w, int col, int x) {
int i,j;
for (i = 0; i < col; i++){
for (j = 0; j < x; j++){
w[j * col + i]++;
}
}
return w;
}
int i, col = 2, row = 6;
int x = 5, y = 3, a = 0;
NumericVector w((row - a) * col * x);
for (i = 0; i < row - a; i++) {
w = calculate(d + (i + a) * col, w + i * col * x, col, x);
}
这是我的转换似乎不起作用。我的问题是如何将这些参数d + (i + a) * col
和w + i * col * x
作为指针传递给Rcpp,因为它不是索引?
如果代码中的以下行按预期工作,
NumericVector w((row - a) * col * x);
为什么不在你的for
循环中做同样的事情?
for (i = 0; i < row - a; i++) {
NumericVector nvx(d + (i + a) * col);
NumericVector nvy(w + i * col * x);
w = calculate(nvx, nvy, col, x);
}