Rcpp中“List”的操作功能 - 如R中的“Reduce function”

时间:2018-01-06 11:29:03

标签: c++ r list rcpp operation

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

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

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

1 个答案:

答案 0 :(得分:1)

将来,您应该包括您迄今为止所尝试的内容以及为什么它没有工作或解释您遇到的问题。这应该按照您在评论中澄清的方式执行您想要的操作(存储在列表中的数字矩阵之和):

#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

注:

这假设列表x的每个元素实际上都是NumericMatrix。如果不是这种情况,则会引发错误。