我需要对后验分布进行非常耗时的近似。因此,我希望将参数的样本保存在 R 之外以供将来分析。
我的样本采用矩阵和向量的形式(其中每个元素都是一次模拟的结果)。有没有办法将这些矩阵和向量保存到文件中?
相关地,您能否评论一下这些耗时近似的有效工作流程?我发现自己反复高亮和运行长代码——肯定有更好的方法来加载、运行然后保存分析吗?
非常感谢!
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。
我不能足够强调记录您的代码的重要性。如果您没有尽职尽责地编写文档,一年后回到复杂的分析就像用棒球棒打自己的脸。更不用说试图从别人停下来的地方接起。