【问题标题】:storing a vector in a matrix in r with unknown vector length将向量存储在 r 中的矩阵中,向量长度未知
【发布时间】:2017-01-26 09:41:17
【问题描述】:

您好,我想知道是否有办法将向量存储到数组或矩阵中。 例如,

array1<-array(dim=c(1,2))
vector1<-as.vector(1:5)
vector2<-as.vector(6:10)
array1[1,1]<-vector1
array1[1,2]<-vector2

这样当我要求时

array1[1,1]

我会收到

[1] 1 2 3 4 5

我已经尝试做我上面所做的事情以及我得到的错误

 number of items to replace is not a multiple of replacement length

有没有办法解决这个问题?

另外,我面临的问题是我不知道向量长度,并且向量也可能有不同的长度。

即向量 1 的长度可以是 6,向量 2 的长度可以是 7。

谢谢!

【问题讨论】:

  • 你想用什么来填充较短的向量?
  • 如果长度不相等,使用列表而不是数组。
  • 您希望列表中有多少个维度?该向量可以存储在一个列表中并使用my_list[[1]] 检索,所以我不确定您为什么要使用两个索引号array[1,1]
  • 我的问题是我必须创建 5x4175 个随机长度的向量,这会使我的环境变得混乱,我猜我的列表也应该有 5 行和 4175 列。

标签: arrays r matrix vector


【解决方案1】:

尝试使用列表:

my_list <- list()
my_list[[1]] <- c(1:5)
my_list[[2]] <- c(6:11)

列表允许您存储不同长度的向量。可以通过寻址列表的元素来检索向量:

> my_list[[1]]
#[1] 1 2 3 4 5

【讨论】:

  • 一个列表可以有多行多列吗?
  • @Donkeykongy 列表可以包含具有任意数量的行和列的矩阵或 data.frames。但是考虑到评论中的这个问题,我假设 Roland 的答案描述了您正在寻找的内容,即列表矩阵而不是矩阵列表。
【解决方案2】:

您可以使用列表矩阵:

m <- matrix(list(), 2, 2)
m[1,1][[1]] <- 1:2
m[1,2][[1]] <- 1:3
m[2,1][[1]] <- 1:4
m[2,2][[1]] <- 1:5
m
#     [,1]      [,2]     
#[1,] Integer,2 Integer,3
#[2,] Integer,4 Integer,5

m[1, 2]
#[[1]]
#[1] 1 2 3

m[1, 2][[1]]
#[1] 1 2 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多