【问题标题】:R: Name an object created within a function with a name defined by the functionR:用函数定义的名称命名在函数中创建的对象
【发布时间】:2014-09-27 00:34:29
【问题描述】:

我需要模拟一些数据,我想有一个内置所有功能的函数,所以我只需要运行

simulate(scenario="xxx")

此函数将指定场景的所有模拟数据集存储在名为 simdat 的列表中。在函数中,我想重命名该列表“simdat.xxx”并将其保存为“simdat_xxx.RData”,以便稍后我可以加载此文件并访问列表 simdat.xxx。我需要该列表有一个名称,专门指它是哪个批次,因为我正在处理很多批次,我可能想同时加载几个。

有没有办法在函数中命名并使用它来命名对象?我一遍又一遍地搜索,找不到这样做的方法。无奈之下,我只好这样做:在函数内部,

(a) 使用 paste 编写一个临时脚本,如下所示

temp.fn <- function(simdat){
  simdat.xxx <- simdat
  save(simdat.xxx,file="simdat_xxx.RData")
  }

(b) 使用 writeLines 将其写入 .R 文件

(c) 源文件

(d) 运行它

这对我来说真的有点矫枉过正。有没有更好的方法来做到这一点?

非常感谢您的帮助!

董里

【问题讨论】:

  • 你可以考虑saveRDS()/readRDS()这对;您只需将对象分配给您在读回时喜欢的任何名称(例如,基于 Rdata 文件名)。
  • @baptiste - 哇!也谢谢你。真的很感激!
  • 我要去saveRDS()。它干净多了。我想知道为什么我以前没有考虑过寻找另一个保存选项。我想最难知道的是你不知道的东西。

标签: r naming


【解决方案1】:

试试这个,

simulate <- function(scenario="xxx"){

   simdat <- replicate(4, rnorm(10), simplify=FALSE)
   data_name <- paste("simdat", scenario, sep=".")
   assign(data_name, simdat)
   save(list = data_name, file = paste0("simdat_", scenario, ".Rdata"))
}

【讨论】:

  • 非常感谢您。 assign 胜过任何头痛药!也感谢paste0。我以前一直用paste(sep="",...),这个更整洁。
猜你喜欢
  • 1970-01-01
  • 2020-10-01
  • 2023-03-22
  • 2020-06-12
  • 1970-01-01
  • 2014-03-09
  • 2018-10-24
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多