在R中,当我使用这样一个命令时:
b <-c(7,10) b
默认情况下,它是创建行向量(1行,2列)还是列向量(1列,2行)?我不能从显示的输出告诉。我是R初学者(这是显而易见的:))
watbbzwu1#
两者都不是。默认情况下,向量没有维度属性,只有长度。如果您查看有关矩阵运算help("%*%")的文档,您会看到:如果两个矩阵一致,则将它们相乘。如果一个参数是向量,则将其提升为行或列矩阵,以使两个参数一致。如果两个参数都是长度相同的向量,则将返回内积(作为矩阵)。所以R将以任何方式解释一个向量,只要它能使矩阵乘积变得有意义。举几个例子来说明:
help("%*%")
> 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
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”的类型应该是一个整数,带有级别......
wgx48brx3#
c函数创建了一个“原子”向量,用R编程领域中Norman Matloff的话来说:原子向量,因为它们的分量不能分解成更小的分量。它可以被看作是元素的“连接”(实际上c代表concatenate),通过它们的位置索引,因此没有维度(在 * 空间 * 意义上),而只是一个从1到对象本身长度的连续索引。
c
3条答案
按热度按时间watbbzwu1#
两者都不是。默认情况下,向量没有维度属性,只有长度。
如果您查看有关矩阵运算
help("%*%")
的文档,您会看到:如果两个矩阵一致,则将它们相乘。如果一个参数是向量,则将其提升为行或列矩阵,以使两个参数一致。如果两个参数都是长度相同的向量,则将返回内积(作为矩阵)。
所以R将以任何方式解释一个向量,只要它能使矩阵乘积变得有意义。
举几个例子来说明:
一个矩阵就是一个带有维度属性的向量,因此添加一个显式维度使它成为一个矩阵,R将以任何在上下文中有意义的方式来做这件事。
下面是矩阵乘法上下文中的行为示例:
svgewumm2#
你可以把R中的向量(c())看作一行或一列。
它是一个集合。默认情况下,当转换为数据框时
其中第一个索引将寻址表的哪一列正被引用,这与线性代数中的正统做法相矛盾。
即为了在将向量投射到 Dataframe 中的过程中访问Hello,需要附加索引,
这就是事情变得古怪的地方,因为 Dataframe 不需要字符串......“hello”的类型应该是一个整数,带有级别......
wgx48brx3#
c
函数创建了一个“原子”向量,用R编程领域中Norman Matloff的话来说:原子向量,因为它们的分量不能分解成更小的分量。
它可以被看作是元素的“连接”(实际上
c
代表concatenate),通过它们的位置索引,因此没有维度(在 * 空间 * 意义上),而只是一个从1到对象本身长度的连续索引。