我有一个这样的清单清单
list1 <- list(a = 1, error = 2)
list2 <- list(a = 1, error = 3)
mylist <- list(list1, list2)
我想将当前命名的所有元素重命名"a"
为中的名称new_names
new_names <- c("new_1", "new_2")
我可以for
像这样循环
for(i in seq_along(mylist)) {
names(mylist[[i]])[names(mylist[[i]]) == "a"] <- new_names[i]}
并得到我想要的结果:
mylist
[[1]]
[[1]]$new_1
[1] 1
[[1]]$error
[1] 2
[[2]]
[[2]]$new_2
[1] 3
[[2]]$error
[1] 4
我想做到这一点而无需for
循环。像该map
函数之类的东西可能不起作用,因为它会替换所有名称,而不仅仅是替换那些"a"
。
library(purrr)
mylist_2 <- map(mylist, ~{names(.)[names(.) == "a"] <- new_names})
您可以使用Map
从baseR
f <- function(x, y) {
names(x)[names(x) == "a"] <- y
x
}
Map(f, x = mylist, y = new_names)
#[[1]]
#[[1]]$new_1
#[1] 1
#
#[[1]]$error
#[1] 2
#
#
#[[2]]
#[[2]]$new_2
#[1] 1
#
#[[2]]$error
#[1] 3
使用purrr
它将是map2
purrr::map2(mylist, new_names, f)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句