Ответ 1
Вы не можете использовать несколько индексов в одном выражении [ ]
. Это ограничение на C-язык, что нет C32-матричная система или библиотека, которую я знаю о победах. Поэтому используйте ( )
.
Фиксируя это и ошибку, которую вы фактически не пропустили src
до cxxfunction()
, получаем следующее:
R> src <- '
+ Rcpp::NumericMatrix Am(A);
+ int nrows = Am.nrow();
+ int ncolumns = Am.ncol();
+ for (int i = 0; i < ncolumns; i++) {
+ for (int j = 1; j < nrows; j++) {
+ Am(j,i) = Am(j,i) + Am(j-1,i);
+ }
+ }
+ return Am;
+ '
R> fun <- cxxfunction(signature(A = "numeric"), body = src, plugin="Rcpp")
R> fun(matrix(1,4,4))
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
R>
Наконец, обратите внимание, что у сахара Rcpp есть примеры для работы во всей строке или столбце за раз, см. архивы списков рассылки и виньетку.
Изменить: Просто для того, чтобы быть явным, это то же самое, используя только один цикл и индексирование столбца сахара Rcpp по столбцам:
R> src <- '
+ Rcpp::NumericMatrix Am(A);
+ int nrows = Am.nrow();
+ for (int j = 1; j < nrows; j++) {
+ Am(j,_) = Am(j,_) + Am(j-1,_);
+ }
+ return Am;
+ '
R> fun <- cxxfunction(signature(A = "numeric"), body = src, plugin="Rcpp")
R> fun(matrix(1,4,4))
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
R>