从表达式字符串中保存 RData 和 RDS 文件对象
Saving RData and RDS File Object from an Expression String
我正在尝试使用表达式字符串动态保存 RData/RDS 文件,如下所示:
rdata_saver <- function(target="rdata-one", obj_name=c(), rdata_name=c(), directory=""){
if(target=="all"){
save.image(file=paste0(directory, rdata_name, ".RData"))
}
else if(target=="many"){
for(a in 1:length(obj_name)){
save(eval(parse(text=obj_name[a]), envir = environment()), file=paste0(directory, rdata_name[a], ".RData"))
}
}
else if(target=="rdata-one"){
if(length(obj_name)==1){
save(eval(parse(text=obj_name), envir = environment()), file=paste0(directory, rdata_name, ".RData"))
}
}
else if(target=="rds-one"){
saveRDS(eval(parse(text=obj_name), envir = environment()), file=paste0(directory, rdata_name[a], ".rds"))
}
}
然后制作一些虚拟数据框:
a <- data.frame(x=seq(1,200,1), y=rnorm(200))
b <- data.frame(x=seq(1,500,1), y=rnorm(500))
c <- data.frame(x=seq(1,300,1), y=rnorm(300))
但它似乎没有按预期工作,保存对象参数似乎将整个表达式视为对象名称而不是“先对其求值”
rdata_saver(target="rdata-one", obj_name="a", "test_data", "C:/Users/User/Downloads/")
Error in save(eval(parse(text = obj_name)), file = paste0(directory, rdata_name, :
object ‘eval(parse(text = obj_name))’ not found
这是否意味着无法从表达式中保存 RData?或至少采用动态方法?
如果您将要保存的对象直接传递到函数中,这将起作用:
rdata_saver <- function(target="rdata-one",obj_name, rdata_name, directory = ''){
saveRDS(obj_name, paste0(directory, rdata_name, ".rds"))
}
rdata_saver("rdata-one", a, 'test', 'C:/Users/User/Downloads/')
如果您将它们作为字符串传递,我们可以使用 get
.
rdata_saver <- function(target="rdata-one",obj_name, rdata_name, directory = ''){
saveRDS(get(obj_name), paste0(directory, rdata_name, ".rds"))
}
rdata_saver("rdata-one", 'a', 'test', 'C:/Users/User/Downloads/')
我正在尝试使用表达式字符串动态保存 RData/RDS 文件,如下所示:
rdata_saver <- function(target="rdata-one", obj_name=c(), rdata_name=c(), directory=""){
if(target=="all"){
save.image(file=paste0(directory, rdata_name, ".RData"))
}
else if(target=="many"){
for(a in 1:length(obj_name)){
save(eval(parse(text=obj_name[a]), envir = environment()), file=paste0(directory, rdata_name[a], ".RData"))
}
}
else if(target=="rdata-one"){
if(length(obj_name)==1){
save(eval(parse(text=obj_name), envir = environment()), file=paste0(directory, rdata_name, ".RData"))
}
}
else if(target=="rds-one"){
saveRDS(eval(parse(text=obj_name), envir = environment()), file=paste0(directory, rdata_name[a], ".rds"))
}
}
然后制作一些虚拟数据框:
a <- data.frame(x=seq(1,200,1), y=rnorm(200))
b <- data.frame(x=seq(1,500,1), y=rnorm(500))
c <- data.frame(x=seq(1,300,1), y=rnorm(300))
但它似乎没有按预期工作,保存对象参数似乎将整个表达式视为对象名称而不是“先对其求值”
rdata_saver(target="rdata-one", obj_name="a", "test_data", "C:/Users/User/Downloads/")
Error in save(eval(parse(text = obj_name)), file = paste0(directory, rdata_name, :
object ‘eval(parse(text = obj_name))’ not found
这是否意味着无法从表达式中保存 RData?或至少采用动态方法?
如果您将要保存的对象直接传递到函数中,这将起作用:
rdata_saver <- function(target="rdata-one",obj_name, rdata_name, directory = ''){
saveRDS(obj_name, paste0(directory, rdata_name, ".rds"))
}
rdata_saver("rdata-one", a, 'test', 'C:/Users/User/Downloads/')
如果您将它们作为字符串传递,我们可以使用 get
.
rdata_saver <- function(target="rdata-one",obj_name, rdata_name, directory = ''){
saveRDS(get(obj_name), paste0(directory, rdata_name, ".rds"))
}
rdata_saver("rdata-one", 'a', 'test', 'C:/Users/User/Downloads/')