【问题标题】:How can I add vector elements to corresponding vectors in lists?如何将向量元素添加到列表中的相应向量?
【发布时间】:2014-08-22 00:11:52
【问题描述】:

我在列表中有一个可变长度的向量和一个向量,有点像这样:

set.seed(0)
x <- lapply(as.list(sample(1:10, 10, repl=TRUE)),
            function(x) sample(1:10, x, repl=TRUE))
y <- sample(1:10, 10, repl=TRUE)

我需要将y 的每个元素添加到x 中的对应向量中。目前我是这样完成的:

newList <- list()

for (i in seq_along(y)) {
  newList <- c(newList, list(y[i] + x[[i]]))
}

> x[1:2]
[[1]]
[1]  1  3  2  7  4  8  5  8 10

[[2]]
[1]  4  8 10

> y[1:2]
[1] 4 8

> newList
[[1]]
[1]  5  7  6 11  8 12  9 12 14

[[2]]
[1] 12 16 18

[[3]]
[1] 13 17 12 13
...

有没有更好的方法,也许使用lapply-like 函数?

【问题讨论】:

  • Map("+",x,y) 会做到的。
  • 我只是想先找出这是否是重复的,因为我确信我之前已经回答过类似的问题 - 它与 stackoverflow.com/questions/24945339/… 基本相同,但应用了不同的功能。也非常类似于:stackoverflow.com/questions/12215785/…
  • 你是对的,但我认为即使答案相同,提出不同的问题也有一定的价值。在寻找与我类似的问题时,我没有遇到这些。对于第二个,我不会想到应用该解决方案。
  • Mapmapply("+", x, y) 的包装器

标签: r list vector


【解决方案1】:

这与之前的问题非常相似,它们使用Mapmapply 对两个相同长度的列表/向量进行串联操作:

How do I apply an index vector over a list of vectors?
Add respective dataframes in list together in R

对于这种特定情况,请尝试:

Map("+",x,y)

#[[1]]
#[1]  5  7  6 11  8 12  9 12 14
#
#[[2]]
#[1] 12 16 18
#
#[[3]]
#[1] 13 17 12 13

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多