我是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
。如果不是这种情况,将引发错误。