您可以使用矩阵列表。最初,您创建一个向量列表:
vec <- list(1:3, 4:10, 2:5, letters[1:3])
Run Code Online (Sandbox Code Playgroud)
然后将其强制转换为矩阵:
mat1 <- matrix(vec, nrow = 2, ncol = 2)
# [,1] [,2]
#[1,] integer,3 integer,4
#[2,] integer,7 character,3
mat2 <- matrix(vec, nrow = 2, ncol = 2, byrow = TRUE)
# [,1] [,2]
#[1,] integer,3 integer,7
#[2,] integer,4 character,3
Run Code Online (Sandbox Code Playgroud)
要提取其元素,请使用例如:
mat1[1, 1][[1]]
Run Code Online (Sandbox Code Playgroud)
首先[1, 1]是获取矩阵元素。但由于元素是一个列表,因此需要使用额外的元素[[1]]来访问实际的向量。
如果您想在打印时查看其内容,请将其强制为数据框。例如,
dat1 <- data.frame(mat1)
# X1 X2
#1 1, 2, 3 2, 3, 4, 5
#2 4, 5, 6, 7, 8, 9, 10 a, b, c
Run Code Online (Sandbox Code Playgroud)
您可以稍后更改列名称,例如,
names(dat1) <- c("col1", "col2")
# col1 col2
#1 1, 2, 3 2, 3, 4, 5
#2 4, 5, 6, 7, 8, 9, 10 a, b, c
Run Code Online (Sandbox Code Playgroud)
dat1$col1通过,dat1[[1]]或访问其列dat1[["col1"]]。在这种情况下,每一列都是一个列表。
如果您的最终目标是数据框而不是矩阵,则可以直接构造此数据框,但必须使用以下方法保护每一列I():
data.frame(col1 = I(list(1:3, 4:10)),
col2 = I(list(2:5, letters[1:3])) )
# col1 col2
#1 1, 2, 3 2, 3, 4, 5
#2 4, 5, 6,.... a, b, c
Run Code Online (Sandbox Code Playgroud)
无论如何,我不喜欢这些数据结构。它可能会使进一步的操作变得麻烦。