R中列和行的默认矩阵数
Default matrix number of columns and rows in R
在 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
面向用户的 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)
。这些参数具有默认值的事实并不排除它们是 "missing"。例如,
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
由于这些参数的 "missing-ness" 不受它们具有默认值这一事实的影响,因此可以独立处理该逻辑,如 is done here.
在 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
面向用户的 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)
。这些参数具有默认值的事实并不排除它们是 "missing"。例如,
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
由于这些参数的 "missing-ness" 不受它们具有默认值这一事实的影响,因此可以独立处理该逻辑,如 is done here.