在R中,c命令默认创建行向量还是列向量

ao218c7q  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(318)

在R中,当我使用这样一个命令时:

b <-c(7,10)
b

默认情况下,它是创建行向量(1行,2列)还是列向量(1列,2行)?
我不能从显示的输出告诉。我是R初学者(这是显而易见的:))

watbbzwu

watbbzwu1#

两者都不是。默认情况下,向量没有维度属性,只有长度。
如果您查看有关矩阵运算help("%*%")的文档,您会看到:
如果两个矩阵一致,则将它们相乘。如果一个参数是向量,则将其提升为行或列矩阵,以使两个参数一致。如果两个参数都是长度相同的向量,则将返回内积(作为矩阵)。
所以R将以任何方式解释一个向量,只要它能使矩阵乘积变得有意义。
举几个例子来说明:

> b <- c(7,10)
> b
[1]  7 10
> dim(b) <- c(1,2)
> b
     [,1] [,2]
[1,]    7   10
> dim(b) <- c(2,1)
> b
     [,1]
[1,]    7
[2,]   10
> class(b)
[1] "matrix"
> dim(b) <- NULL
> b
[1]  7 10
> class(b)
[1] "numeric"

一个矩阵就是一个带有维度属性的向量,因此添加一个显式维度使它成为一个矩阵,R将以任何在上下文中有意义的方式来做这件事。
下面是矩阵乘法上下文中的行为示例:

> m <- matrix(1:2,1,2)
> m
     [,1] [,2]
[1,]    1    2
> m %*% b
     [,1]
[1,]   27
> m <- matrix(1:2,2,1)
> m %*% b
     [,1] [,2]
[1,]    7   10
[2,]   14   20
svgewumm

svgewumm2#

你可以把R中的向量(c())看作一行或一列。

rbind(c(1,3,5),c(2,4,6))
cbind(c(1,2,3),c(4,5,6))

它是一个集合。默认情况下,当转换为数据框时

data.frame(c(1,2,3))

其中第一个索引将寻址表的哪一列正被引用,这与线性代数中的正统做法相矛盾。
即为了在将向量投射到 Dataframe 中的过程中访问Hello,需要附加索引,

a = data.frame(c("hello","F***ery"))
a[[1]][[1]]

这就是事情变得古怪的地方,因为 Dataframe 不需要字符串......“hello”的类型应该是一个整数,带有级别......

wgx48brx

wgx48brx3#

c函数创建了一个“原子”向量,用R编程领域中Norman Matloff的话来说:
原子向量,因为它们的分量不能分解成更小的分量。
它可以被看作是元素的“连接”(实际上c代表concatenate),通过它们的位置索引,因此没有维度(在 * 空间 * 意义上),而只是一个从1到对象本身长度的连续索引。

相关问题