重命名for循环中的多个列表项

f0ofjuux  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(119)

我有多个项目数量相同的列表。我想重命名循环中的所有列表项目。例如,从列表项目名称 “a,B,c”,我想将它们重命名为 “first,second,third”

#create 3 lists with items names a, b, c
list1 <- list(a=c(1:10), b=c(1:5), c=c(1:3))
list2 <- list(a="a", b="b", c="c")
list3 <- list(a=runif(4), b=runif(2), c=runif(4))

# wanted names of list items 
names <- c("first", "second", "third")

new_list <- list()

for (i in 1:3){
  for(j in seq_along(names)) {
    n <- paste0(names[[j]])
    new_list[[n]] <-  assign(paste0("list_", i), get(paste0("list", i)))
  }
}

但结果只重命名了第三个列表..我应该如何一次重命名所有列表项?

rqcrx0a6

rqcrx0a61#

我们可以使用lapply()setNames()

lapply(list(list1, list2, list3), \(x) setNames(x, names))
#> [[1]]
#> [[1]]$first
#>  [1]  1  2  3  4  5  6  7  8  9 10
#> 
#> [[1]]$second
#> [1] 1 2 3 4 5
#> 
#> [[1]]$third
#> [1] 1 2 3
#> 
#> 
#> [[2]]
#> [[2]]$first
#> [1] "a"
#> 
#> [[2]]$second
#> [1] "b"
#> 
#> [[2]]$third
#> [1] "c"
#> 
#> 
#> [[3]]
#> [[3]]$first
#> [1] 0.7475211 0.9317233 0.1603680 0.7952381
#> 
#> [[3]]$second
#> [1] 0.5450439 0.8351545
#> 
#> [[3]]$third
#> [1] 0.1782355 0.9909339 0.2366660 0.7104271

reprex package(v2.0.1)于2023年3月7日创建
数据来自OP

list1 <- list(a=c(1:10), b=c(1:5), c=c(1:3))
list2 <- list(a="a", b="b", c="c")
list3 <- list(a=runif(4), b=runif(2), c=runif(4))

names <- c("first", "second", "third")

我们也可以使用for循环和setNames)()

new_list <- list()

for (i in 1:3){
    new_list[[i]] <-  setNames(get(paste0("list", i)), names)
}

reprex package(v2.0.1)于2023年3月7日创建

kognpnkq

kognpnkq2#

将所有列表放入一个list中,循环并分配新的名称,然后将它们放回环境中,注意我们正在覆盖原始列表:

names(list1)
# [1] "a" "b" "c"

list2env(lapply(mget(ls(pattern = "^list")), 
                function(i) setNames(i, names)), globalenv())

names(list1)
# [1] "first"  "second" "third"

相关问题