有一种方法可以用NA值初始化数值向量.
NumericVector x(10,NumericVector::get_na())
Run Code Online (Sandbox Code Playgroud)
是否有任何类似的方法将矩阵初始化为NA值?
Rom*_*ois 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 ;
}
Run Code Online (Sandbox Code Playgroud)
FWIW,Rcpp11你可以使用一些更具表现力的语法:
NumericMatrix m(n,n, NA) ;
Run Code Online (Sandbox Code Playgroud)
感谢这个构造函数
有点。
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>
Run Code Online (Sandbox Code Playgroud)
编辑:但是对于几乎所有实际工作,我都使用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>
Run Code Online (Sandbox Code Playgroud)