我是Rcpp的新手。我想知道如何有效地总结“列表”的元素。我想知道一些操作功能,例如R中的Reduce()
例如,

A=list(c(1,2,3,4),c(-1,1,0,-2))
B=Reduce('+',A)

它给出B=c(0,3,3,2)
谢谢。

最佳答案

将来,您应该包括到目前为止已经尝试过的内容以及为什么它不起作用,或者说明您遇到的困难。正如您在注释中所阐明的那样(您存储在列表中的数字矩阵之和),这应该可以实现您希望的操作:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericMatrix Rcpp_matrix_List_sum(List x) {
    int n = x.size();
    NumericMatrix result = as<NumericMatrix>(x[0]);
    for ( int i = 1; i < n; ++i ) {
        result += as<NumericMatrix>(x[i]);
    }
    return result;
}

/*** R
A <- list(matrix(c(1, 2, 3, 4), nrow = 2), matrix(c(-1, 1, 0, -2), nrow = 2))
Rcpp_matrix_List_sum(A)
*/

结果:
> A <- list(matrix(c(1, 2, 3, 4), nrow = 2), matrix(c(-1, 1, 0, -2), nrow = 2))

> Rcpp_matrix_List_sum(A)
     [,1] [,2]
[1,]    0    3
[2,]    3    2

注意:

这假定List x的每个元素实际上都是NumericMatrix。如果不是这种情况,将引发错误。

07-26 02:06