使用assign()创建R对象后,已保存文件无法加载显示的问题求助
问题原因
你当前代码的核心问题是:你保存的是对象名的字符串,而不是assign()创建的实际对象。
举个例子,paste0(index,'_arima_',sku)返回的是字符串"1_arima_sku_a",你用管道把这个字符串传给save(),相当于执行了save("1_arima_sku_a", file=...)——但这个操作是在尝试保存名为"1_arima_sku_a"的对象,而你用assign()创建的是名为1_arima_sku_a(无引号,且以数字开头)的对象,两者完全不是同一个东西。所以你保存的其实是字符串本身,加载后自然看不到你想要的那个值(12345)。
解决方法
方法1:用save()的list参数(推荐)
save()的list参数可以直接接受对象名的字符串,完美适配动态生成的对象名,即使对象名以数字开头也能正常工作:
res <- 12345 sku = 'sku_a' index = 1 # 先定义对象名字符串,避免重复编写 obj_name <- paste0(index,'_arima_',sku) # 创建目标对象 assign(obj_name, res) # 保存对象(关键:用list参数传入对象名字符串) save(list = obj_name, file = paste0(obj_name, ".RData"))
加载时直接用load(paste0(obj_name, ".RData")),对象会以1_arima_sku_a的名字出现在环境中(RStudio里数字开头的对象可能显示在"Values"分组下,直接点击即可查看)。
方法2:用get()获取对象后保存
如果想给保存后的对象重命名(比如避免数字开头的麻烦),可以先用get()把动态对象取出来,再保存:
# 创建对象步骤同上 obj_name <- paste0(index,'_arima_',sku) assign(obj_name, res) # 取出对象并以新名字保存 save(arima_result = get(obj_name), file = paste0("arima_", sku, ".RData"))
加载后环境里会出现名为arima_result的对象,直接调用即可。
额外提示
- 尽量避免创建以数字开头的对象名,虽然R允许,但后续引用时必须用反引号包裹(比如
1_arima_sku_a),非常麻烦。可以在index前加前缀,比如paste0("id_", index,'_arima_',sku)。 - 加载后如果看不到对象,可以在控制台输入
ls()查看当前环境的所有对象名,确认是否存在。
内容的提问来源于stack exchange,提问作者CharlotteS.
相关产品推荐
相关产品推荐

