gpt4 book ai didi

r - 创建具有向量(非标量)元素的矩阵

转载 作者:行者123 更新时间:2023-12-02 01:34:00 25 4
gpt4 key购买 nike

我想创建一个像矩阵一样的对象,其元素为向量。像:

(1,2,3) (1,3,6) (2,4,1)

(0,7,8) (2,3,4) (5,2,1)

(9,0,8) (8,4,6) (1,1,1)

我应该做什么?

最佳答案

您可以使用矩阵列表。最初,您创建一个向量列表:

vec <- list(1:3, 4:10, 2:5, letters[1:3])

然后将其强制转换为矩阵:

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

要提取其元素,请使用例如:

mat1[1, 1][[1]]

第一个[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

您可以稍后更改列名称,例如,

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

通过 dat1$col1dat1[[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

不管怎样,我不喜欢这些数据结构。它可能会使进一步的操作变得麻烦。

关于r - 创建具有向量(非标量)元素的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72847001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com