【问题标题】:Add vectors/matrices to a list of vectors/matrices将向量/矩阵添加到向量/矩阵列表中
【发布时间】:2014-07-06 07:25:17
【问题描述】:

我有一个向量或矩阵列表,如下所示:

l <- list(1:3, 4:6)
l
# [[1]]
# [1] 1 2 3

# [[2]]
# [1] 4 5 6

现在我想在列表中添加一个新的向量/矩阵。使用c() 不是一个好方法,因为新向量的每一项都将作为单个列表元素添加:

c(l, 7:9)
# [[1]]
# [1] 1 2 3

# [[2]]
# [1] 4 5 6

# [[3]]
# [1] 7

# [[4]]
# [1] 8

# [[5]]
# [1] 9

另外list() 也不能正常工作,它会创建一个长度为 2 的嵌套列表,而不是长度为 3 的列表:

list(l, 7:9)
# [[1]]
# [[1]][[1]]
# [1] 1 2 3

# [[1]][[2]]
# [1] 4 5 6

# [[2]]
# [1] 7 8 9

对此的标准解决方案是什么?

【问题讨论】:

  • c(l,list(7:9)) 也许。不过,我认为这可能之前已经在这里介绍过。
  • 谢谢。我猜它可能会被覆盖,我搜索了但我找不到相关的问题,至少有一个明确的主题。因此我在这里发布了这个简单的问题。
  • 感谢您的信任,我似乎找不到重复的问题。如果我很快找不到,我会将我的评论推广为答案。

标签: r list vector append


【解决方案1】:
do.call(c, list(l, list(7:9)))
# [[1]]
# [1] 1 2 3

# [[2]]
# [1] 4 5 6

# [[3]]
# [1] 7 8 9

如果它是一个矩阵:

do.call(c, list(l, list(matrix(7:9))))
# [[1]]
# [1] 1 2 3

# [[2]]
# [1] 4 5 6

# [[3]]
#      [,1]
# [1,]    7
# [2,]    8
# [3,]    9

如果要添加多个向量或矩阵,可以将它们全部放在第二个列表中:

do.call(c,list(l, list(matrix(7:9), 6:10)))
# [[1]]
# [1] 1 2 3

# [[2]]
# [1] 4 5 6

# [[3]]
#      [,1]
# [1,]    7
# [2,]    8
# [3,]    9

# [[4]]
# [1]  6  7  8  9 10

【讨论】:

  • 谢谢。我们可以像@thelatemail 上面所建议的那样用简单的c(l, list(7:9)) 替换do.call() 吗?
  • 是的,我后来注意到:c(l, list(7:9)) 应该可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2021-03-12
  • 1970-01-01
  • 2012-08-11
相关资源
最近更新 更多