在R中将列向量转换为矩阵

9
我有一组向量V_1, V_2, ..., V_n,希望将其转换为矩阵。每个向量在矩阵中成为列向量,每个向量的大小相同。是否有一个简单的函数可以实现这个功能?在The R Book的矩阵部分中似乎没有这个函数。
目前我正在做的是:
mat=matrix(c(V1, V2, ..., VN), nrow=length(V1))
  1. 是否有一种矩阵追加函数,可以将列追加到矩阵的末尾?

编辑:最终目标是对这个矩阵执行 k-means 聚类。我的向量名称实际上不是 V_1, V_2, ..., V_n。向量的名称是与数据来源的文件名相对应的子字符串(这是一个 1-1 的映射关系)。最终,我将遍历特定目录中的所有文件,将数据提取到一个向量中,然后将每个列向量追加到矩阵中。


你的向量命名有没有什么规律或原因,它们是字面上的V1 ... VN吗?另一个解决方案是使用cbind,但你仍然需要为每个向量命名。 - russellpierce
我的向量并不是以$V_1,\ldots,V_n$命名的,但是它们的命名方式有一定的规律,因为它们将成为数据来源文件名的子字符串。 - CodeKingPlusPlus
你的数据结构和所需结构非常简单,不需要统计学知识即可描述。因此,你的问题可能更适合在stackoverflow上提问。现在你不需要做任何事情。如果足够多的社区成员同意我的评估,它将被迁移。 - russellpierce
我更喜欢您原来的方法,而不是一些更复杂的方法。但有一件小事可以做得不同:您可以使用ncol = N而不是nrow = length(V1),其中N是向量的数量。 - turtlegraphics
1个回答

9
一个适用于您的命令是:sapply(ls(pattern="V[[:digit:]]"),get)。其中pattern参数是一个正则表达式,用于匹配您想要的向量(仅匹配您想要的向量)。或者,鉴于这些向量的名称来自某些文件名的子字符串,我假设您可以创建一个字符向量,其中每个向量名称都作为一个元素。如果是这样,您可以将ls命令替换为该向量。
编辑:按列添加矩阵应使用cbind(列绑定)。例如:
V1 <- rnorm(20)
V2 <- rnorm(20)
V3 <- rnorm(20)
mat <- matrix(c(V1,V2),nrow=length(V1))
(mat.app <- cbind(mat,V3))

当我在一个向量上运行(mat.app <- cbind(mat, V3))时,它可以工作,但是当我在循环中应用它时,mat没有改变。有什么想法吗? - CodeKingPlusPlus
好的...改变的是mat.app而不是mat。因此,在您的循环中,您需要确保将新的mat存储在同一个名称中,稍后将其用作cbind中的参数。例如,mat <- cbind(mat,VectorToAdd) - russellpierce
4
你可以使用 do.call("cbind", lapply(ls(pattern="V[[:digit:]]"), get)) 来自动化执行cbind向量组合的最后一步骤。 - caracal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接