默认情况下,c命令是否在R中创建行向量或列向量

时间:2015-07-07 19:36:56

标签: r

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

b <-c(7,10)
b

默认情况下是创建行向量(1行,2列)还是列向量(1列,2行)?

我无法从显示的输出中辨别出来。 我是R初学者(很明显:):)

3 个答案:

答案 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到长度的连续索引对象本身。