将近似结果保存在 R 之外

Posted

技术标签:

【中文标题】将近似结果保存在 R 之外【英文标题】:Save approximation results outside of R 【发布时间】:2013-04-23 06:53:29 【问题描述】:

我需要对后验分布进行非常耗时的近似。因此,我希望将参数的样本保存在 R 之外以供将来分析。

我的样本采用矩阵和向量的形式(其中的每个元素都是一次模拟的结果)。有没有办法将这些矩阵和向量保存到文件中?

与此相关,您能否评论一下这些耗时的近似值的高效工作流程?我发现自己反复高亮和运行长代码——肯定有更好的方法来加载、运行然后保存分析吗?

非常感谢!

【问题讨论】:

你的问题有点不具体。你读过?saveRDS吗? saveRDS 保存单个对象,对吗?有没有办法将我所有的矩阵和结果向量保存在一个文件中?我希望能够打开这个“文件”,所有这些矩阵和向量都将被加载到 R 中进行分析(跟踪图、分位数等) 阅读帮助页面。它提到了替代方案,可以保存多个对象甚至整个工作区。 【参考方案1】:

Ahn 已经为您提供了您的第一个答案。

saveRDS(obj, "obj.rds")
obj <- readRDS("obj.rds") 

这些命令是 R 中序列化的基础。

正如 Roland 提到的,你也可以用同样的方式保存和加载你的整个工作空间:

save.image("my_workspace.RData")
load("my_workspace.RData") 

关于工作流程。我强烈建议您习惯于打包您在 R 中所做的所有事情。采取额外步骤并打包您的工作会显着提高工作效率。

创建包骨架时,通常数据存储在/extdata/data/obj.rds 中,然后在包加载后通过以下方式访问:

obj <- readRDS(paste(path.package('package_name'),"/data/obj.rds"))
# R < 3.0.0 it's .path.package, not path.package

通常,我将所有分析存储为函数。因此,只需运行该函数即可获得所需的结果。

例如:

#' My Analysis Function
#' 
#' This function does x, y, and z. 
#' 
#' @param obj The name of the object...
#' @export your_analysis_fun

your_analysis_fun <- function(obj="name") 
 obj <- readRDS(paste(path.package('package_name'),"/data/",obj,".rds"))
 # the things you usually copy paste go here
 # ...
 return(results)

记录您的代码也很有帮助,我在上面提供了一个简短的示例(Roxygen2)。如果您使用 RStudio,只需将 Ctrl + Shift + B 组合在一起即可构建并重新加载您的包,然后在您进行更改时再次运行您的函数。他们在使软件包的工作流范式变得有价值方面做得很好。也推荐使用 git。

我不能足够强调记录您的代码的重要性。如果您没有尽职尽责地编写文档,一年后回到复杂的分析就像用棒球棒打自己的脸。更不用说试图从别人停下来的地方接起。

【讨论】:

我使用save 来存储我所有的矩阵和向量。 save, saveRDS, save.image 和有什么区别?另外,您所说的“包装”是什么意思?这些可能是基本问题,所以如果你能提供一个链接,我也可以自己阅读。感谢关于使用函数的观点! 这是一篇很长但值得一读的文章:cran.r-project.org/doc/manuals/R-exts.html saveRDS 保存了一个对象。保存,保存工作区,save.image 只是保存整个工作区的包装器。

以上是关于将近似结果保存在 R 之外的主要内容,如果未能解决你的问题,请参考以下文章

R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件

R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件

R将结果保存在mac上的word文档中

R语言将多张可视化结果图像保存到PDF中实战:多图保存到同一PDF页将多个绘图保存到PDF格式的不同页面

如何将python运行结果保存成txt?

如何在 R 中保存循环(使用 if 语句)的结果?