我正在编写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
Run Code Online (Sandbox Code Playgroud)
要么
> 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
Run Code Online (Sandbox Code Playgroud)
据我所知,前者比后者更简洁.此外,前者用NA填充矩阵,而后者填充NULL.
这是"更好"的方法吗?在这种情况下,我将"更好"定义为"更好的性能",因为这是统计计算,并且此操作将在大型数据集中进行.
虽然前者更简洁,但理解起来并不令人惊讶,所以我觉得这可能是两种方式.
另外,R中NA和NULL之间有什么区别??NA和?NULL告诉我"NA"的长度为"1",而NULL的长度为"0" - 但这里有更多吗?还是最佳做法?这将影响我用于创建矩阵的方法.
Sha*_*ane 46
如有疑问,请测试自己.第一种方法既简单又快捷.
> 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
Run Code Online (Sandbox Code Playgroud)
关于NA和NULL之间的区别:
实际上有四个特殊常数.
此外,还有四个特殊常量,NULL,NA,Inf和NaN.
NULL用于指示空对象.NA用于缺少("不可用")数据值.Inf表示无穷大,并且NaN在IEEE浮点演算中不是a数(例如,操作的结果分别为1/0和0/0).
您可以在R手册中阅读有关语言定义的更多信息.
| 归档时间: |
|
| 查看次数: |
52738 次 |
| 最近记录: |