保存get'd变量(分配后)

时间:2019-04-25 21:14:45

标签: r

为什么R找不到此变量?

assign(paste0('my', '_var'), 2)
get(paste0('my', '_var')) ## isn't this returning an object?
save(get(paste0('my', '_var')), file =  paste0('my', '_var.RDATA'))

这会引发错误:

Error in save(paste0("my", "_var"), file = paste0("my", "_var.RDATA")) : 
  object ‘paste0("my", "_var")’ not found

2 个答案:

答案 0 :(得分:3)

从帮助页面开始,save()函数期望“要保存的对象名称(作为符号或字符串)。”这些值不会被忽略,即,您不能放入最终将返回字符串或原始值的函数。如果要调用函数以返回变量名称的字符串,请使用list=参数。

save(list=paste0('my', '_var'), file =  paste0('my', '_var.RDATA'))

尽管在R中使用get / assign通常不是一个好习惯。它们通常是更好的方法,因此您可能需要重新考虑一般方法。

最后,如果要保存单个对象,则可能要考虑使用saveRDS()。人们通常会在使用save()函数时期望他们这么做。

答案 1 :(得分:1)

save的文档指出...应该是

  

要保存的对象的名称(作为符号或字符串)。

实际上,如果您在控制台中输入save,您会看到源代码包含行

names <- as.character(substitute(list(...)))[-1L]

其中substitute捕获其参数并且不对其求值。因此,正如错误所暗示的,它正在寻找名称为paste0('my', '_var')的对象,而不是对提供的表达式进行求值。