在R中,当我使用这样的命令时:
b <-c(7,10)
b
默认情况下是创建行向量(1行,2列)还是列向量(1列,2行)?
我无法从显示的输出中辨别出来。 我是R初学者(很明显:):)
答案 0 :(得分:19)
都不是。默认情况下,矢量没有维度属性,它只有一个长度。
如果你查看关于矩阵算术的文档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
答案 1 :(得分:4)
您可以将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))
它是一个列,这样第一个索引将解决引用表的哪一列,与线性代数中的正统相矛盾。
即,在向量转换为data.frame时访问hello 需要额外的索引
a = data.frame(c("hello","F***ery"))
a[[1]][[1]]
这就是事情变得古怪的地方,因为数据框架不会带有字符串...&#34;你好&#34;应该是一个整数,有级别......
答案 2 :(得分:1)
c
函数创建一个&#34; atomic&#34;矢量,在R编程艺术中使用Norman Matloff的词:
原子矢量,因为它们的组件不能分解成 较小的组件。
它可以看作是一个&#34;连接&#34; (实际上c
代表连接)元素,由它们的位置索引,因此没有维度(在空间意义上),而只是一个从1到长度的连续索引对象本身。