如何保存名称在变量中的对象?

时间:2019-11-21 14:46:03

标签: r

这需要一些“棘手的R”,但这一次超出了我的幻想:-)我需要save()一个名称在变量var中的对象。我尝试过:

save(get(var), file = ofn)
# Error in save(get(var), file = ofn) : object ‘get(var)’ not found

save(eval(parse(text = var)), file = ofn)
# Error in save(eval(parse(text = var)), file = ofn) : 
#  object ‘eval(parse(text = var))’ not found
不幸的是,两者都失败了。您将如何解决这个问题?

2 个答案:

答案 0 :(得分:8)

使用list参数。这样会将x保存在文件x.RData中。 (list参数可以指定名称的向量,如果您一次需要保存多个)。

x <- 3
name.of.x <- "x"
save(list = name.of.x, file = "x.RData")

# loading x.RData to check that it worked
rm(x)
load("x.RData")
x
## [1] 3

注意

对于问题中的第一次尝试使用get,我们需要指定名称而不是其值,以便尝试使用do.call将字符名称转换为name类对象。

do.call("save", list(as.name(name.of.x), file = "x.RData"))

关于使用eval的问题的第二次尝试,写出save,将其名称替换为name类对象,然后对其求值。

eval(substitute(save(Name, file = "x.RData"), list(Name = as.name(name.of.x))))

答案 1 :(得分:0)

如果只是一个对象,则可以使用saveRDS

a<-1:4
var<-"a"
saveRDS(get(var),file="test.R")
readRDS(file="test.R")
[1] 1 2 3 4