在软件包开发中,每个示例需要<5s。但是,一对stan_model()
和rstan::sampling()
花费的时间超过5秒,如下所示:
Examples with CPU or elapsed time > 5s
user system elapsed
fit 1.25 0.11 32.47
因此,我将每个\donttest{}
的{{1}}放入roxygen注释rstan::sampling()
在示例#'@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
中,我的stan文件如下:
inst/extdata
我对代码 scr <- system.file("extdata", "Model_A.stan", package="BayesianAAA")
scr <- rstan::stan_model(scr)
有很多疑问。
1)第一个问题是如何包括我现有的stan文件以及如何为我的rstan_package_skeleton(path = 'BayesianAAA')
文件引用.stan
?
根据下一页的页面,它说
如果程序包中包含现有的.stan文件,则可以使用rstan_package_skeleton的可选rstan::stan_model()
参数来包含它们。
所以,我想我应该执行,我不确定,但是需要以下类似方式;
stan_files
但是我不知道如何在没有`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()
在这里,另一个问题出现了,
2)第二个问题:我在哪里执行代码`rstan_package_skeleton(path = 'BayesianAAA', stan_files = c("Model_A.stan",`Model_B.stan`,`Model_C.stan` )`.
?我在现有套件项目中的R Studio控制台中执行它。这是对的吗 ?然后,出现了新项目,它包含了旧的现有项目。我该怎么办 ?
https://cran.r-project.org/web/packages/rstantools/vignettes/minimal-rstan-package.html
3)我不太了解软件包“ rstanarm ”,但是我尝试为我的软件包模仿它,但是不能对任何{{1 }}文件中,我错了吗?
对我的英语不好,以及对这些事情缺乏学习感到抱歉。 如果您能告诉我,我将不胜感激。
答案 0 :(得分:1)
通常不应该编写在运行时调用stan_model
的程序包,除非像 brms 或 tmbstan 那样在运行时生成Stan程序静态地编写它。 CRAN上有许多软件包,它们基本上是按照为 rstanarm 开发的构建过程来提供经过编译的Stan程序的,rstantools::rstan_package.skeleton
函数,step-by-step guide和developer guidelines可以直接解决您的问题
CRAN策略允许较长的安装时间,但对示例和单元测试所用的时间施加了限制,该限制比编译一个简单的Stan程序所花费的时间要短得多。因此,只有在预编译了Stan程序的情况下,才有可能对它进行充分的测试。
即使那样,也可能很难在5秒内从后验分布中进行采样(因此),因此您经常不得不使用小的数据集,一个链,少量的迭代等。
最好将Stan程序的名称(应以.stan扩展名结尾,否则不使用句点,并且名称中仅包含ASCII字母,数字和下划线)传递给{{1} }。如果从RStudio这样做,那么我将不在现有项目中调用它。然后
在安装过程中,所有Stan程序都将被编译并保存在列表
rstantools::rstan_package_skeleton()
中,然后可由软件包中的R函数使用。规则是将根据stanmodels
中的模型代码编译的Stan程序存储为列表元素src/stan_files/foo.stan
。
有数十个R软件包的stanmodels$foo
目录中都有Stan程序(尽管Stan程序的位置将移至src/stan_files
,以用于下一个 rstantools 发布),大多数情况下只是遵循了渐晕,除了编写更多的R函数外,无需执行任何其他步骤。