通过R中的引用调用将C数组指针转换为Rcpp

问题描述 投票:10回答:1

我在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) * colw + i * col * x作为指针传递给Rcpp,因为它不是索引?

c++ c r rcpp
1个回答
0
投票

如果代码中的以下行按预期工作,

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.