I have the following codes in C. I am new to Rcpp and I want to convert the C codes I have to Rcpp.
C code:
#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 code:
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);
}
This is my conversion that does not seem to work. My question is how to pass these parameters d + (i + a) * col and w + i * col * x as pointers in Rcpp, since its not an indexing?
If the below line in your code works as intended,
NumericVector w((row - a) * col * x);
why not do the same in your for loop?
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With