r - 在R,NULL与NA中分配矩阵的最佳方法?

标签 r matrix

我正在编写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/

    相关文章:

    r - 从最固定的 feols 对象中提取自由度

    r - 解释 e1071 :R 中 naiveBayes 分类器返回的条件概率

    java - 依赖矩阵的生成

    python - 高效的 ndarray 操作

    matrix - 内置矩阵 _Object2World、UNITY_MATRIX_MVP...行优先还是列优先?

    mysql - 无法连接到R中的本地MySQL服务器

    r - 在 R 中的 lapply 调用中添加列表名称作为绘图标题

    r - 拟合反函数

    python - 在Python中获取矩阵/列表列表中的所有对角线

    matrix - 在 Julia 中将矩阵提升为幂