【问题标题】:Combine lists while overriding values with same name in R合并列表,同时在 R 中覆盖具有相同名称的值
【发布时间】:2013-01-05 11:26:08
【问题描述】:

我有两个带有命名元素的列表:

a <- list(a=1, b=2)
b <- list(b=3, c=4)

我想合并这些列表,这样a中任何同名的元素都会被列表b覆盖,所以我把这个弄出来:

list(a=1, b=3, c=4)

我知道我可以循环执行此操作,但是在 R 中是否有更紧凑的方法来执行此操作?

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一个简单的解决方案:

    # create new list
    newlist <- c(a,b)
    
    # remove list element(s)
    newlist[!duplicated(names(newlist), fromLast = TRUE)]
    

    结果:

    $a
    [1] 1
    
    $b
    [1] 3
    
    $c
    [1] 4
    

    setdiff 的更简单的解决方案:

    c(a[setdiff(names(a), names(b))], b)
    
    $a
    [1] 1
    
    $b
    [1] 3
    
    $c
    [1] 4
    

    【讨论】:

      【解决方案2】:

      R 有一个内置函数可以做到这一点modifyList

      modifyList(a, b)
      

      【讨论】:

      • Base R 有很多好东西。每次启动 R 并学习 5 个函数时尝试help(package = "base") :-)
      • modifyList,哇。不知道这个功能存在。另外,您对 help(package = "base") 的评论值得额外 +1(不能这样)。
      猜你喜欢
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2022-11-10
      • 2023-02-23
      相关资源
      最近更新 更多