在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)
您可以将 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”的类型应该是一个整数,具有级别......