【问题标题】:lapply and the save function in Rlapply 和 R 中的保存功能
【发布时间】:2016-06-07 00:56:28
【问题描述】:

我在我的工作环境中创建了一个对象列表

data <- c("variable1", "variable2", "variable3")

我想以变量名作为目录将文件保存到不同的目录...所以我这样做是为了给我一个文件名列表以通过 lapply 传递给保存函数..

paste0(data,"/",data,".rda")


lapply(data,FUN=save,file = paste0(data,"/",data,".rda"))

我得到了错误

Error in FUN(X[[i]], ...) : object ‘X[[i]]’ not found

我不确定我在这里做错了什么..

【问题讨论】:

标签: r lapply


【解决方案1】:

您有对象的列表,或名称的对象列表吗?你说你有前者,但你给的代码是后者的。

另外,如果每个文件只有一个对象,那么最好使用saveRDS 函数(和loadRDS 来加载它)。

lapply(data, function(x) saveRDS(get(x), paste0(x, "/", x, ".rds")))

如果你必须使用save:

lapply(data, function(x) save(list=x, file=paste0(x, "/", x, ".rds")))

【讨论】:

  • 我认为他有前者,但代码不适用于这种情况。另外,我的代码也需要saveRDS,因为它是写的。
  • 您对前者的权利...我列出了变量名称,而不是变量列表..这是我的问题之一..加上提供的这个 lapply 函数给出了类似的错误对于我之前得到的那些..gzfile(文件,模式)中的错误:无效的'description'参数另外:警告消息:在if(file ==“”)中停止(“'file'必须是非空的string") : 条件长度 > 1 并且只使用第一个元素
  • 我想使用 lapply ,但我真的必须使用 save() 而不是 saveRDS()
  • @cdcaveman 哎呀,错误。您必须使用 get 从名称中获取对象本身。此外,您仍然可以使用save 而不是saveRDS
【解决方案2】:

这里发生了几件事。

首先,当您不关心每次迭代调用的函数的返回值时,您不需要使用lapply。在这种情况下它什么也没提供。

其次,更重要的是,您正在做的是将对象写入文件,其名称源自其在 R 中的变量名。这是一种反模式。

相反,创建一个对象列表,并使用for 进行工作。我们需要为此使用saveRDS(感谢Hong Ooi),因为l[[n]] 也不是环境中对象的名称。

l <- list(variable1 = variable1, variable2 = variable2, variable3=variable3)
for (n in names(l)) {
    fname = paste0(n, '/', n, '.rda')
    saveRDS(file=fname, l[[n]])
}

最好只保存整个列表,但所有数据将在一个目录中的一个文件中。

至于你的代码到底有什么问题:

  • 您将file 的相同值传递给save 的所有调用,但您不打算这样做。这个值是一个向量,但你想要的是每次迭代都从这个向量中获取一个元素。
  • lapply 计算传递给函数的值的方式使save 感到困惑。具体来说,它会这样做:

names &lt;- as.character(substitute(list(...)))[-1L]

这会导致类似于以下内容,这不是环境中对象的名称。

c("variable1", "variable2", "variable3")[[1]]

【讨论】:

  • 在迭代器中使用“n”是任意的吗.. n in names(l) 这里的 n 和 l 是什么?
  • lfor 上方的行中计算,是的,n 是任意名称。
  • 库(financialInstriments)函数 getSymbols.FI() 要求文件位于 .rda 中,并且还要求文件位于同名文件夹中.. IE variable1/variable1.rda .这样您就可以简单地调用 getSymbols.FI("variable1") ,然后在其他对 buildSpread() 的调用中使用它
  • 你的 for 循环确实有效......但我认为 saveRDS() 与我用来将我的数据拉入工作空间的库不兼容,读取错误如下错误:坏恢复文件魔法编号(文件可能已损坏)- 未加载数据另外:警告消息:文件 'variable.rda' 具有幻数 'X' 不推荐使用 2 之前的保存版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2018-12-19
  • 2018-06-24
  • 2016-11-12
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多