有一种方法可以用NA值初始化数值向量,如。
NumericVector x(10,NumericVector::get_na())
有没有类似的方法将矩阵初始化为NA值?
答案 0 :(得分:10)
这是一个不浪费内存的版本。
#include <Rcpp.h>
using namespace Rcpp ;
// [[Rcpp::export]]
NumericMatrix na_matrix(int n){
NumericMatrix m(n,n) ;
std::fill( m.begin(), m.end(), NumericVector::get_na() ) ;
return m ;
}
FWIW,在Rcpp11
中,您可以使用更具表现力的语法:
NumericMatrix m(n,n, NA) ;
答案 1 :(得分:5)
排序。
R中的矩阵实际上是具有维度属性的向量。因此,这是方形矩阵的一种方法,可以很容易地推广到矩形矩阵:
R> cppFunction('NumericMatrix foo2(int a) {
+ NumericVector v = NumericVector(a*a,NumericVector::get_na());
+ return NumericMatrix(a,a,v.begin());
+ }')
> foo2(2)
[,1] [,2]
[1,] NA NA
[2,] NA NA
R>
编辑:但对于几乎所有实际工作,我使用Armadillo矩阵类,因为它们易于使用,成熟,高性能且功能齐全。他们还有许多填充的构造函数,但(目前?)没有填充NA
。但是在构造的矩阵上调用fill()
方法是微不足道的:
R> cppFunction('arma::mat foo3(int a) {
+ return arma::mat(a,a).fill(NA_REAL);
+ }', depends="RcppArmadillo")
R> foo3(2)
[,1] [,2]
[1,] NA NA
[2,] NA NA
R>