将近似结果保存在 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文件