【问题标题】:how to create a list using double brackets to extract elements如何使用双括号创建列表以提取元素
【发布时间】:2019-01-29 04:45:09
【问题描述】:
L <- list(a= c(1,3,5), b= c(2,3,4,1), c= c(4,7))
v <- c(3,2,4)

如下图

> L[[1]]+3
[1] 4 6 8
> L[[2]]+2
[1] 4 5 6 3
> L[[3]]+4
[1]  8 11

我希望得到结果为

list(a= c(4,6,8), b= c(4,5,6,3), c= c(8,11)) 

是否可以使用 APPLY 函数?

【问题讨论】:

  • 你只需要mapply("+", L, v)
  • purrr::map2(L, v, +) 如果您想要一个 tidyverse 解决方案(与 mapply 的作用相同)
  • 哇!那太棒了!非常感谢
  • 使用Map(`+`, L, v)mapply(`+`, L, v, simplify = FALSE) 更安全,否则如果L 的长度恰好相同,您将得到一个矩阵而不是列表。

标签: r apply


【解决方案1】:

因为,我找不到这个的副本。我会发布一个答案。

我们可以使用mapply在列表中添加元素。

mapply("+", L, v)

#$a
#[1] 4 6 8

#$b
#[1] 4 5 6 3

#$c
#[1]  8 11

【讨论】:

  • 或者@alistaire 建议使用Map(+, L, v) 更安全。
【解决方案2】:

lapply():

L[] <- lapply(1:3, function(i) L[[i]] + v[i])
L

$a
[1] 4 6 8

$b
[1] 4 5 6 3

$c
[1]  8 11

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2023-02-16
    • 2021-04-28
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多