使用purrr :: map和函数内的动作(不将输出分配给对象)

时间:2017-10-20 19:13:14

标签: r purrr

我正在尝试将循环转换为purrr以获得清晰度和(通常)更好的处理速度

我有一个可变数量的Rdata文件,例如“AB.Rdata”,“CD.Rdata”和“YZ.Rdata”
我创建了一个Rdata名称的矢量x.rdata
我想使用purrr::map加载向量的每个元素
以下是我的意图,但我怀疑这不是好习惯

invisible(purrr::map(x.rdata, load, envir = .GlobalEnv))

我在assign()中使用map()遇到同样的问题 当我只想捕获最终对象时,我应该限制使用map()吗? 感谢

1 个答案:

答案 0 :(得分:1)

你可以像其他人一样使用walk但是为此我只使用基函数Vectorize

### build data, save it
dir.create("temp")
AB <- 1
CD <- 2
XY <- 3
x.rdata <- c("temp/AB.RData","temp/CD.RData","temp/XY.RData")
save(AB,file=x.rdata[1])
save(CD,file=x.rdata[2])
save(XY,file=x.rdata[3])

### remove, reload

rm(AB,CD,XY)
Vectorize(load,"file")(x.rdata,envir = .GlobalEnv)
c(AB,CD,XY) # [1] 1 2 3

rm(AB,CD,XY)
purrr::walk(x.rdata, load, envir = .GlobalEnv)
c(AB,CD,XY) # [1] 1 2 3

### clean up the mess
unlink("temp",T)
file.exists("temp") # FALSE