【问题标题】:Matrix of vectors in r with col/row names and unknown lengthr 中具有列/行名称和未知长度的向量矩阵
【发布时间】:2017-01-30 10:09:47
【问题描述】:

我正在尝试创建一个数据结构来存储向量。我正在寻找的是一个 3x2 矩阵,其中包含不同长度的向量。

             front        side 
Original  c(dim=221) c(dim =200)
zscore    c(dim=221) c(dim =200)
smoothed  c(dim=221) c(dim =200)

我已经尝试过:

dataset <- array(dim=c(3,2))
rownames(dataset) <- c("original","zscores","smoothed")
colnames(dataset) <- c("front", "side")

dataset["original", "side"] <- myNumericVectorOfLength221
dataset["original", "front"] <- myNumericVectorOfLength200

但它会引发“大小不同”的错误。像 dataset &lt;- array(dim=c(3,2,221)) 这样的三维数组由于长度的不同而不起作用,如果我创建像 (dataset["original", "side"] &lt;- list(c(1,2,3))) 这样的向量矩阵,我会丢失 col/rownames。

有没有适合我想法的解决方案?提前致谢。

【问题讨论】:

  • 您可以为 alist 的元素分配名称,这还不够吗?
  • 请您再解释一下好吗? @LeoP。
  • 您可以尝试一个三维数组,其第三维与您最大的向量一样大,并用 NA 填充其他向量,因此它们都具有相同的长度。

标签: r matrix vector


【解决方案1】:

您可以创建一个多维列表,例如:

# prepare some random vectors with different lengths
myNumericVectorOfLength221 <- rnorm(221)
myNumericVectorOfLength200 <- rnorm(220)

# create a multi dimensional list
dataset <- array(list(),dim=c(3,2))
rownames(dataset) <- c("original","zscores","smoothed")
colnames(dataset) <- c("front", "side")

# fill some cells
dataset[["original", "side"]] <- vec10
dataset[["zscores","front"]] <- vec3

# let's see the whole matrix
> dataset
         front     side      
original NULL      Integer,10
zscores  Integer,3 NULL      
smoothed NULL      NULL

# let's get one of the added vector
> dataset[["original", "side"]]
[1]  1  2  3  4  5  6  7  8  9 10

【讨论】:

  • 这是我的list-方法的一个非常有用的增强。我什至不知道你能做到这一点。谢谢!
  • 太棒了!非常感谢
【解决方案2】:

您可以将您的向量保存在一个列表中并命名该列表的元素。

要么创建一个包含所有向量的列表

mylist <- list("front_Original" = vector1, "front_zscore" = vector2, ...)

或为您的因素创建子列表

mylist2 <- list("front" = list("Original" = vector1, "zscore" = vector2, ...), 
               "side" = list("Original" = vector3, "zscore" = vector4))

列表元素可以有不同的类别和维度,因此您不会遇到任何问题。引用列表的工作方式类似于data.frame,因此您可以使用mylist2$front$Originalmylist2[[1]][[1]] 调用mylist2 的某个向量。

【讨论】:

  • 好的,我现在明白你的意思了。主要问题是我使用变量“type”来获取像“Original”这样的字符串,所以我想像这样调用数组:dataset [type,“side”]。我刚刚尝试对 'mylist2$front$type 做同样的事情,但它不起作用。反正有没有以这种方式调用列表?感谢您的帮助。
猜你喜欢
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
相关资源
最近更新 更多