当你用save
把一个变量保存在一个R数据文件中时,它会以保存它的会话中的任何名称保存。当我稍后从另一个会话加载它时,它会以相同的名称加载。加载脚本不可能知道的变量名。2这个变量名可能会覆盖加载会话中已有的同名变量。有没有一种方法可以安全地将对象从数据文件加载到指定的变量名中,而不会有损坏现有变量的风险?
示例:
保存会话:
x = 5
save(x, file="x.Rda")
加载会话:
x = 7
load("x.Rda")
print(x) # This will print 5. Oops.
我希望它如何工作:
x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
9条答案
按热度按时间au9on6nz1#
您可以创建一个新环境,将.rda文件加载到该环境中,然后从该环境中检索对象。但是,这会带来一些限制:要么你知道你的对象的原始名称,要么只有一个对象保存在文件中。
此函数返回从提供的.rda文件加载的对象。如果文件中有多个对象,则返回任意一个。
of1yzvn42#
您也可以尝试类似的操作:
kmbjn2e33#
与上面的其他解决方案类似,我将变量加载到一个环境变量中,这样,如果我从
.Rda
加载多个变量,它们不会使我的环境混乱。演示:
3zwjbxry4#
具有一个对象的Rdata文件
xoshrz7s5#
如果有人希望使用普通源文件而不是保存的Rdata/RDS/RDA文件来执行此操作,则解决方案与@Hong Ooi提供的解决方案非常相似
图纸:
[1]“参数值为7”
并在单独的源文件TestSourceFile.R中
同样,此解决方案仅在只有一个文件时有效,如果有多个文件,则只返回其中一个(可能是第一个,但不能保证)。
j91ykkif6#
我从@ricardo扩展了答案,允许在
.Rdata
文件包含多个变量时选择特定变量(因为我的积分很低,无法编辑答案),在列出.Rdata
文件中包含的变量后,添加了一些行来读取用户输入。wvt8vs2t7#
@ricardo的另一个例子是(有效地)使用一个单独的环境
类似的警告,只期望返回一个对象
vmpqdwk38#
如果只是保存单个对象,请不要使用
.Rdata
文件,而使用.RDS
文件:bvjxkvbb9#
我使用以下代码: