0

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

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

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

非常感谢!

4

1 回答 1

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。

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

于 2013-04-23T07:38:43.830 回答