我正在编写R代码来创建方矩阵。所以我的方法是:
我的问题非常简单:预先分配此矩阵的最佳方法是什么?到目前为止,我有两种方法:
> x <- matrix(data=NA,nrow=3,ncol=3)
> x
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA NA NA
[3,] NA NA NA
要么
> x <- list()
> length(x) <- 3^2
> dim(x) <- c(3,3)
> x
[,1] [,2] [,3]
[1,] NULL NULL NULL
[2,] NULL NULL NULL
[3,] NULL NULL NULL
据我所知,前者是一种比后者更简洁的方法。同样,前者用NA填充矩阵,而后者用NULL填充。
哪种“更好”的方法可以做到这一点?在这种情况下,我将“更好”定义为“更好的性能”,因为这是统计计算,并且此操作将针对大型数据集进行。
尽管前者更为简洁,但理解起来却并非如此惊人,因此我觉得这可能会发生任何变化。
另外,R中的NA和NULL有什么区别? ?NA和?NULL告诉我“NA”的长度为“1”,而NULL的长度为“0”-但是这里还有更多吗?还是最佳做法?这将影响我用来创建矩阵的方法。
最佳答案
如有疑问,请测试一下自己。第一种方法既简单又快速。
> create.matrix <- function(size) {
+ x <- matrix()
+ length(x) <- size^2
+ dim(x) <- c(size,size)
+ x
+ }
>
> system.time(x <- matrix(data=NA,nrow=10000,ncol=10000))
user system elapsed
4.59 0.23 4.84
> system.time(y <- create.matrix(size=10000))
user system elapsed
0.59 0.97 15.81
> identical(x,y)
[1] TRUE
关于NA和NULL之间的区别:
实际上有四个特殊常数。
In addition, there are four special constants, NULL, NA, Inf, and NaN.
NULL is used to indicate the empty object. NA is used for absent (“Not Available”) data values. Inf denotes infinity and NaN is not-a-number in the IEEE floating point calculus (results of the operations respectively 1/0 and 0/0, for instance).
您可以在the R manual on language definition中阅读更多内容。
关于r - 在R,NULL与NA中分配矩阵的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745622/