我经常在大量的数据处理之后编写saveRDS()
语句,这促使我立即编写readRDS()
,以便将来进行可重复的编码,访问.RDS文件,以便更快地加载到R
中。下面概述了从类型化readRDS()
语句生成saveRDS()
语句的手动过程。如何改进呢?如何在EMACS
和/或R
中为自己编写宏/函数
## I type these out:
saveRDS(dems,"./_00_data_original/dems.RDS")
saveRDS(meds,"./_00_data_original/meds.RDS")
saveRDS(anti,"./_00_data_original/anti.RDS")
## Then I rectangle kill (C-x-r-k) the file names and commas
## and rectangle yank (C-x-r-y) them on the left hand side
## note: depends on filenames being equal lengths
dems,saveRDS("./_00_data_original/dems.RDS")
meds,saveRDS("./_00_data_original/meds.RDS")
anti,saveRDS("./_00_data_original/anti.RDS")
## then I Esc-Shift-5 to query replace ",saveRDS" with " <- readRDS"
dems <- readRDS("./_00_data_original/dems.RDS")
meds <- readRDS("./_00_data_original/meds.RDS")
anti <- readRDS("./_00_data_original/anti.RDS")
发布于 2014-08-26 17:45:06
也许您可以使用这样的东西:
saveRead <- function(..., path, prefix = "", envir = .GlobalEnv) {
dots <- substitute(list(...))[-1]
objs <- sapply(dots, deparse)
new_objs <- paste0(prefix, objs)
paths <- file.path(path, paste0(objs, ".RDS"))
invisible(lapply(seq_along(objs), function(x) {
saveRDS(get(objs[x], envir = envir), file = paths[x])
assign(new_objs[x], readRDS(paths[x]), envir = envir)
}))
}
下面是一个例子。我只是写信给一个tempdir
,但是您将输入您实际需要的目录。此外,为了演示起见,我在对象名(在重读时)以"test_“作为前缀。将prefix
设置为""
(默认)以保留原始名称。
a <- 1:2
b <- 3:4
ls()
# [1] "a" "b" "saveRead"
x <- tempdir()
list.files(x, ".RDS")
# character(0)
saveRead(a, b, path = x, prepend = "test_")
ls()
# [1] "a" "b" "saveRead" "test_a" "test_b" "x"
list.files(x, ".RDS")
# [1] "a.RDS" "b.RDS"
为了重现你的行为,它可以用来:
saveRead(dems, meds, anti, path = "./_00_data_original")
https://stackoverflow.com/questions/25510858
复制相似问题