我需要为后验分布运行非常耗时的近似。因此,我希望将参数的样本保存在R之外以供将来分析。
我的样本采用矩阵和向量的形式(每个元素都来自一次模拟)。有没有办法将这些矩阵和向量保存到文件中?
相关地,您能否对这些耗时近似的有效工作流程发表评论?我发现自己反复突出显示并运行长码 - 当然有更好的方法来加载,运行,然后保存分析?
非常感谢!
答案 0 :(得分: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。
我不能强调记录代码的重要性。一年后回到复杂的分析,如果你没有完成编写文档的尽职调查,就像用棒球棒击打自己。更不用说试图去别人离开的地方了。