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

Vic*_*tor 14 r

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

b <-c(7,10)
b
Run Code Online (Sandbox Code Playgroud)

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

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

jor*_*ran 21

都不是.默认情况下,矢量没有维度属性,它只有一个长度.

如果你看一下矩阵运算的文档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"
Run Code Online (Sandbox Code Playgroud)

矩阵只是具有维度属性的向量.因此,添加一个显式维度使其成为一个矩阵,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
Run Code Online (Sandbox Code Playgroud)

  • ...有些偏向于将其视为列向量?毕竟,`t(b)`是行向量. (5认同)

kpi*_*pie 7

您可以将 R 中的向量 ( c() ) 视为行或列。你可以看到这个

rbind(c(1,3,5),c(2,4,6))
cbind(c(1,2,3),c(4,5,6))
Run Code Online (Sandbox Code Playgroud)

它是一个集合。默认情况下,当投射到数据框时

data.frame(c(1,2,3))
Run Code Online (Sandbox Code Playgroud)

它是一列,其中第一个索引将解决引用表的哪一列,这与线性代数中的正统做法相反。

即,要在将向量转换为 data.frame 中访问 hello,需要额外的索引

a = data.frame(c("hello","F***ery"))
a[[1]][[1]]
Run Code Online (Sandbox Code Playgroud)

这就是事情变得古怪的地方,因为数据帧不包含字符串......“hello”的类型应该是一个整数,具有级别......