R中列和行的默认矩阵数

时间:2016-11-30 19:46:10

标签: r matrix default-value

在R中,我可以创建一个matrix()的矩阵,它具有函数定义:

function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
{ ... }

这表明行数(nrow)和列(ncol)的默认值为1。

那么为什么下面会破坏?为什么指定1的相同默认值会产生不同的矩阵?

> matrix(1:9)
      [,1]
 [1,]    1
 [2,]    2
 [3,]    3
 [4,]    4
 [5,]    5
 [6,]    6
 [7,]    7
 [8,]    8
 [9,]    9

> matrix(1:9, ncol=1, nrow=1)
     [,1]
[1,]    1

1 个答案:

答案 0 :(得分:2)

面向用户的base::matrix拨打internal function

matrix
# function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) 
# {
#     if (is.object(data) || !is.atomic(data)) 
#         data <- as.vector(data)
#     .Internal(matrix(data, nrow, ncol, byrow, dimnames, missing(nrow), 
#         missing(ncol)))
# }
# <bytecode: 0x000000000b802e88>
# <environment: namespace:base>

请特别注意,传递给内部函数的最后两个参数是指示行和/或列维度是否已指定的标志:missing(nrow), missing(ncol)。这些参数具有默认值的事实并不排除它们“丢失”。例如,

f <- function(x = 1, y = 2) {
    cat(sprintf(
        "missing(x): %s\nmissing(y): %s\n", 
        missing(x), 
        missing(y)
    ))
}

f()
# missing(x): TRUE
# missing(y): TRUE

由于这些参数的“缺失”不受其默认值的影响,因此该逻辑可以独立处理,如is done here