【问题标题】:How to name objects in many lists at once in R?如何在 R 中一次命名多个列表中的对象?
【发布时间】:2021-11-05 23:25:11
【问题描述】:

我有三个列表,每个列表都包含许多小标题。我想根据 tibble 中的特定值来命名列表中的对象。我知道如何一次处理一个列表。为了方便起见,我将在示例中使用向量:

library("purrr")

list1 <- list(c(id = "ABC", val=1), c(id = "DEF", val = 2), c(id = "GHI", val = 3))
list2 <- list(c(id = "JKL", val=4), c(id = "MNO", val = 5), c(id = "PRS", val = 6))
list3 <- list(c(id = "TUW", val=7), c(id = "XYZ", val = 8), c(id = "ZYX", val = 8))

names(list1) <- map_chr(list1, ~ .x[["id"]])
names(list2) <- map_chr(list2, ~ .x[["id"]])
names(list3) <- map_chr(list3, ~ .x[["id"]])

它有效,但我想知道是否有任何批量方法可以完成它。我尝试使用 for 循环,但它不起作用,它创建了单独的 i 变量,但不会重命名列表中的对象:

for (i in c(list1, list2, list3)) {names(i) <- map_chr(i, ~ .x[["id"]])}

我知道for 循环在 R 中被认为是一种不好的做法,因此非常感谢其他建议。

【问题讨论】:

    标签: r purrr


    【解决方案1】:

    for循环中,我们可能需要assign

    for(nm in paste0('list', 1:3)) {
        tmp <- get(nm)
        names(tmp) <- sapply(tmp, function(x) x[["id"]])
         assign(nm, tmp)
    }
    

    -输出

    > list1
    $ABC
       id   val 
    "ABC"   "1" 
    
    $DEF
       id   val 
    "DEF"   "2" 
    
    $GHI
       id   val 
    "GHI"   "3" 
    

    【讨论】:

      【解决方案2】:

      解决此问题的一种方法是首先合并您的列表,以便合并后的列表将更改其名称

      list_of_lists <- list(list1, list2, list3)
      
      list_of_lists <- 
        lapply(list_of_lists, function(y) setNames(y, map_chr(y, ~ .x[["id"]])))
      
      [[1]]
      [[1]]$ABC
         id   val 
      "ABC"   "1" 
      
      [[1]]$DEF
         id   val 
      "DEF"   "2" 
      
      [[1]]$GHI
         id   val 
      "GHI"   "3" 
      
      
      [[2]]
      [[2]]$JKL
         id   val 
      "JKL"   "4" 
      
      [[2]]$MNO
         id   val 
      "MNO"   "5" 
      
      [[2]]$PRS
         id   val 
      "PRS"   "6" 
      
      
      [[3]]
      [[3]]$TUW
         id   val 
      "TUW"   "7" 
      
      [[3]]$XYZ
         id   val 
      "XYZ"   "8" 
      
      [[3]]$ZYX
         id   val 
      "ZYX"   "8" 
      

      【讨论】:

      • 我该如何让它们再次分开?
      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      相关资源
      最近更新 更多