【问题标题】:Saved RData object doesn't appear in environment after load() call调用 load() 后,保存的 RData 对象不会出现在环境中
【发布时间】:2020-10-16 13:59:06
【问题描述】:

如果有帮助,这与这个问题有关,在这里我迭代地创建 RData 对象 How to save R data object that has been created using assign()?

以下创建一些变量,每个变量将被分配一个随机值。 为变量赋值后,我将它们保存为唯一的 RData 对象。

然后,我销毁变量并尝试将 RData 对象重新加载回环境。

但是,由于某些原因,RData 对象没有加载到环境中,并且 load() 函数调用也没有返回任何错误。

set.seed(1990)
for (l in LETTERS) {
  print(l)
  SKU <- paste0('SKU_',l)
  assign(paste0('arima_',SKU), runif(1,1,10)) 
  # check assignment
  print(get(paste0('arima_',SKU)))
  # save RData
  paste0('arima_',SKU) %>% save(file = paste0('arima_',SKU,'.RData'))
}

# remove variables
rm(list=ls())

# reload variables
allRData <- fs::dir_ls(path = '.', regexp = 'arima_')
allRData
# arima_SKU_A.RData arima_SKU_B.RData arima_SKU_C.RData arima_SKU_D.RData arima_SKU_E.RData 
# arima_SKU_F.RData arima_SKU_G.RData arima_SKU_H.RData arima_SKU_I.RData arima_SKU_J.RData 
# arima_SKU_K.RData arima_SKU_L.RData arima_SKU_M.RData arima_SKU_N.RData arima_SKU_O.RData 
# arima_SKU_P.RData arima_SKU_Q.RData arima_SKU_R.RData arima_SKU_S.RData arima_SKU_T.RData 
# arima_SKU_U.RData arima_SKU_V.RData arima_SKU_W.RData arima_SKU_X.RData arima_SKU_Y.RData 
# arima_SKU_Z.RData

# load
lapply(allRData,load,.GlobalEnv)

> lapply(allRData,load,.GlobalEnv)
$arima_SKU_A.RData
[1] "."

$arima_SKU_B.RData
[1] "."

$arima_SKU_C.RData
[1] "."

$arima_SKU_D.RData
[1] "."

$arima_SKU_E.RData
[1] "."

$arima_SKU_F.RData
[1] "."

$arima_SKU_G.RData
[1] "."

$arima_SKU_H.RData
[1] "."

$arima_SKU_I.RData
[1] "."

$arima_SKU_J.RData
[1] "."

$arima_SKU_K.RData
[1] "."

$arima_SKU_L.RData
[1] "."

$arima_SKU_M.RData
[1] "."

$arima_SKU_N.RData
[1] "."

$arima_SKU_O.RData
[1] "."

$arima_SKU_P.RData
[1] "."

$arima_SKU_Q.RData
[1] "."

$arima_SKU_R.RData
[1] "."

$arima_SKU_S.RData
[1] "."

$arima_SKU_T.RData
[1] "."

$arima_SKU_U.RData
[1] "."

$arima_SKU_V.RData
[1] "."

$arima_SKU_W.RData
[1] "."

$arima_SKU_X.RData
[1] "."

$arima_SKU_Y.RData
[1] "."

$arima_SKU_Z.RData
[1] "."


【问题讨论】:

  • 您可能希望将每个 arima 保存为 RDS 文件而不是 R 文件。 Load 基本上会加载保存的整个环境状态(仅包含一个 arima)。
  • 不确定我是否理解,因为每个变量都有自己唯一的名称。这里没有一个“arima”对象。

标签: r environment-variables


【解决方案1】:

问题是管道操作员正在改变调用

save("arima_SKU_A", file = "arima_A.RData'))

类似于

. <- "arima_SKU_A"; save(., file = "arima_A.RData'))

因为. 是它用来传递值的变量。因此,从技术上讲,在每个Rdata 文件中,您都存储了一个变量名称.,其值等于数据集的预期名称。这主要是 save() 对其未命名参数进行的非标准评估的一个怪癖。

由于您希望将变量名称作为字符串而不是符号传递,因此使用save(list=) 参数并自己显式放置. 会更安全。

paste0('arima_',SKU) %>% save(list=., file = paste0('arima_',SKU,'.RData'))

【讨论】:

  • 谢谢@MrFlick!我无法弄清楚这一点。
猜你喜欢
  • 2018-02-02
  • 2019-12-19
  • 2018-03-11
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多