在包开发中,每个示例都需要<5s。然而,这对stan_model()和rstan::sampling()所花费的时间比5s长得多,如下所示:
Examples with CPU or elapsed time > 5s
user system elapsed
fit 1.25 0.11 32.47因此,我在roxygen注释中为每个\donttest{}添加了#'@examples。
在示例#'@examples中,我们不应该运行sampling(),或者有任何治疗方法?
当我从你那里学到的时候,我试着基于代码rstan_package_skeleton(path = 'BayesianAAA')创建我的包(谢谢!)但是,我对此不太了解。
以前,rstan_package_skeleton(path = 'BayesianAAA')启动了我的计算机中的错误(但现在没有发生错误)。所以,我做了我的包裹没有rstan_package_skeleton(),比如说BayesianAAA,在我最初的制作中,我把Model_A.stan,Model_B.stan,Model_C.stan,……在inst/extdata和我参考我的斯坦文件如下;
scr <- system.file("extdata", "Model_A.stan", package="BayesianAAA")
scr <- rstan::stan_model(scr) 关于代码rstan_package_skeleton(path = 'BayesianAAA'),我有很多疑问。
1) 的第一个问题是如何包含现有的stan文件和如何为rstan::stan_model()引用 my .stan文件?根据下面的一页,它说
如果我们将现有的.stan文件包含在包中,我们可以使用可选的stan_files参数来rstan_package_skeleton来包含它们。
所以,我想我应该执行,我不确定,但需要以下类似的方式;
`rstan_package_skeleton(path = 'BayesianAAA', stan_files = "Model_A.stan" )`.但我不知道如何为几个stan文件编写代码,比如Model_A.stan、Model_B.stan、Model_C.stan在我现有的没有rstan_package_skeleton()的包中。我不明白,但是下面的代码是正确的吗?由于我没有将变量stan_files中描述的文件反映在rstan_package_skeleton()创建的新项目中。
`rstan_package_skeleton(path = 'BayesianAAA', stan_files = c("Model_A.stan",`Model_B.stan`,`Model_C.stan` )`.在这里,出现了另一个问题,就是,
2)第二个问题:执行代码rstan_package_skeleton(path = 'BayesianAAA', stan_files = "Model_A.stan" )的?我在我现有的包项目中的R工作室控制台中执行它。是对的吗?然后,新的项目出现了,它包含了旧的现有项目。我该怎么办?
https://cran.r-project.org/web/packages/rstantools/vignettes/minimal-rstan-package.html
3)我对软件包"rstanarm“不太了解,但是我试图为我的包模仿它,但是我不能罚款任何.stan文件,我错了吗?
我很抱歉我的英语很差,而且对这些东西缺乏学习。如果你能告诉我,我将不胜感激。
发布于 2019-04-04 14:08:33
通常不应该编写在运行时调用stan_model的包,除非像brms或tmbstan一样,您在运行时生成Stan程序,而不是静态地编写它。CRAN上有数十个软件包提供编译后的Stan程序,基本上遵循为rstanarm开发的构建过程,rstantools::rstan_package.skeleton函数、分步指南和开发人员指南直接解决了您的问题。
CRAN策略允许较长的安装时间,但对示例和单元测试所用的时间施加限制,这些限制比编译一个简单的Stan程序所需的时间短得多。因此,只有在有预编译的Stan程序的情况下,才有可能对包进行充分的测试。
即使这样,也很难在5秒内从后验分布(充分)中抽取样本,因此您通常需要使用小数据集、一个链、少量的迭代等等。
最好将Stan程序的名称(应该以.stan扩展结尾,而不是使用句点)传递给rstantools::rstan_package_skeleton()。如果这样做是从RStudio,我会调用它而不是在一个现有的项目。然后
在安装过程中,所有Stan程序将被编译并保存在列表
stanmodels中,然后R函数可以在包中使用它。规则是从src/stan_files/foo.stan中的模型代码编译的Stan程序存储为list元素stanmodels$foo。
有几十个R包在他们的src/stan_files目录中有Stan程序(虽然Stan程序的位置将在下一个rstantools版本中移动到inst/stan ),但大多数情况下,这些包只需遵循小片段,除了编写更多的R函数之外,无需执行任何其他步骤。
https://stackoverflow.com/questions/55491953
复制相似问题