R中向量和矩阵之间的关系?

标签 r matrix vector

在 R 中,我听说向量是组织信息的“基本”方式,因为许多其他事物都是根据向量定义的,但向量并不是根据许多其他事物定义的。矩阵也同样具有基本原理吗?矩阵和向量之间是否存在某种关系(也许 R 就像 C#,矩阵只是一个向量加上一条微小的指令?)

最佳答案

矩阵(参见?matrix和更通用的?array)是按行或按列绑定(bind)在一起的向量。

m <- matrix(0, 2, 2)
m
      [,1] [,2]
[1,]    0    0
[2,]    0    0

毫不奇怪,m 是一个矩阵:

is.matrix(m)      # you can also try is.vector(m)
[1] TRUE

但是单个列(或行)不再是矩阵,并且在某种程度上,我们“回到”了向量类。

is.vector(m[, 1]) # you can also try is.matrix(m[, 1])
[1] TRUE

因此,在提取单个行/列时,matrix 类被“删除”。如果您想保留它,您仍然可以:

m[, 1, drop=FALSE]

这很有用,例如如果您想要保留 apply 兼容性,并且提取的行/列数的长度可能为 1。例如,根据条件或其他条件对矩阵进行子集化:

# this returns an error as m[, 1] is no longer a matrix
apply(m[, 1], 1, length)
Error in apply(m[, 1], 1, length) : dim(X) must have a positive length

# but this works like a charm
apply(m[, 1, drop=FALSE], 1, length)
[1] 1 1

最后,还有更细粒度的向量类,称为“原子”(请参阅​​?向量),它们由class返回:

class(m[, 1])
[1] "numeric"

class(m[, 1]>1)
[1] "logical"

如上所示:

class(m[, 1, drop=FALSE])
[1] "matrix"

关于R中向量和矩阵之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37491153/

相关文章:

c++ - Flash vector 图形背后的数学?

c++ - 使用从源字符串中提取的子字符串选择性地填充 vector

file - R命令行文件对话框?类似于 file.choose

r - 在 ggplot2 中左调整标题,或 ggtitle 的绝对位置

latex - 如何使用MathJax渲染增强矩阵?

python - 在 Python 中绘制矩阵图?

r - stringr:通过字符向量提供模式来替换字符串

r - 针织/Rmd : page break after n lines/n distance

matlab - matlab中如何删除矩阵中的特定值

c++ - 从函数返回多维 vector 供main使用,如何正确使用?