如何一次性将列表中的命名tibble转为全局环境独立对象
将列表中的命名tibble批量导出到全局环境
现有一个包含3个命名tibble的列表mylistdf,结构及定义如下:
mylistdf <- list( Peter = structure( list(date = c("2020-03-30", "2020-10-14", "2020-12-06"), Peter = c(0.4, NA, NA), Ben = c(NA, 0.6, NA), Mary = c(NA, NA, 0.7)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame") ), Ben = structure( list(date = c("2020-03-30", "2020-10-14", "2020-12-06"), Peter = c(0.5, NA, NA), Ben = c(NA, 0.4, NA), Mary = c(NA, NA, 0.2)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame") ), Mary = structure( list(date = c("2020-03-30", "2020-10-14", "2020-12-06"), Peter = c(0.2, NA, NA), Ben = c(NA, 0.1, NA), Mary = c(NA, NA, 0.9)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame") ) )
我们需要把列表内的Peter、Ben、Mary三个tibble批量导出为全局环境中的独立对象,替代逐个赋值的繁琐操作,以下是几种可行方法:
方法1:基础R的list2env()(最简方案)
list2env()可以直接将命名列表的元素按名称映射到指定环境,一步完成批量赋值:
# 直接写法 list2env(mylistdf, envir = .GlobalEnv) # 结合管道的写法 mylistdf %>% list2env(envir = .GlobalEnv)
方法2:tidyverse风格的purrr::iwalk()
如果习惯使用tidyverse工具,可以用iwalk()遍历列表,同时利用元素名称完成赋值:
library(purrr) mylistdf %>% iwalk(~ assign(.y, .x, envir = .GlobalEnv))
其中.x代表当前遍历到的tibble元素,.y代表元素对应的名称(Peter/Ben/Mary),assign()负责将元素绑定到全局环境的对应名称上。
验证赋值结果
执行完上述任意方法后,可以用以下代码确认全局环境中是否生成了目标对象:
ls(pattern = "^(Peter|Ben|Mary)$") # 预期输出:[1] "Ben" "Mary" "Peter"
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

