我是R编程语言的新手,我很难找到正确的数据类型。
如何创建向量矩阵?也许更好的方式来描述这将是具有不同长度的矢量的二维阵列。这就是我想要做的事情:
A = c(1, 2, 3, 4)
B = c(5, 6, 7)
C = c(10, 11, 12, 13)
D = c(14, 15, 16)
E = c(21, 22, 23, 24)
F = c(25, 26, 27)
mat = matrix(nrow=3, ncol=2)
#This code does not work, but it may give you the gist of what I'm trying to do
mat[1, 1] = A
mat[1, 2] = B
mat[2, 1] = C
mat[2, 2] = D
mat[3, 1] = E
mat[3, 2] = F
我想得到以下内容:
[,1] [,2]
[1,] 1 2 3 4 5 6 7
[2,] 10 11 12 13 14 15 16
[3,] 21 22 23 24 25 26 27
我确定这是因为我使用了错误的数据类型,但我找不到合适的数据类型。我已经尝试过列表,数组和数据框架,但它们似乎都不完全符合我的目的。谢谢你的帮助!
答案 0 :(得分:6)
你可以制作一个列表矩阵。那看起来像是
mat<-matrix(list(), nrow=3, ncol=2)
mat[[1,1]] <- c(1, 2, 3, 4)
mat[[1,2]] <- c(5, 6, 7)
mat[[2,1]] <- c(10, 11, 12, 13)
mat[[2,2]] <- c(14, 15, 16)
mat[[3,1]] <- c(21, 22, 23, 24)
mat[[3,2]] <- c(25, 26, 27)
请注意,与标准矩阵不同,此处必须使用双括号来提取单元格。此外,它们可能不一定按照您对矩阵的标准函数的预期方式工作。
答案 1 :(得分:1)
我同意MrFlick认为这似乎是个hackish,但我已经做了类似的事情。我想知道是否有任何规律可以让你做一个更紧凑的结构。
A = list(c(1, 2, 3, 4))
B = list(c(5, 6, 7))
C = list(c(10, 11, 12, 13))
D = list(c(14, 15, 16))
E = list(c(21, 22, 23, 24))
F = list(c(25, 26, 27))
mat = matrix(list(), nrow=3, ncol=2)
mat[1, 1] = A
mat[1, 2] = B
mat[2, 1] = C
mat[2, 2] = D
mat[3, 1] = E
mat[3, 2] = F
mat
[,1] [,2]
[1,] Numeric,4 Numeric,3
[2,] Numeric,4 Numeric,3
[3,] Numeric,4 Numeric,3
mat[1,1]
[[1]]
1] 1 2 3 4
如果矩阵中的所有列都具有相同的长度,则可能更容易使用(并显示)两个矩阵的列表。
mlist <- list(fours = do.call(rbind, mat[,1]),
threes= do.call(rbind, mat[,2]) )
mlist
# -----------
$fours
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 10 11 12 13
[3,] 21 22 23 24
$threes
[,1] [,2] [,3]
[1,] 5 6 7
[2,] 14 15 16
[3,] 25 26 27