问题标签 [tmb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 将 g++ 编译错误消息从 TMB 库导出到文本文件
我正在尝试在 R 中使用 gcc (c++) 编译模型(使用 TMB 包)。错误如此之多,以至于在 Rstudio 中,我什至无法向上滚动查看它们的开头。因此,我想将控制台中的所有内容(消息、错误和警告)打印到文本文件中。这样我还可以比较不同的模型输出(或者特别是它们的失败)。
我尝试了以下事情:
=> 给我一个空文件(我或多或少预期)
=> 只打印最终错误
我忽略了什么?
c++ - TMB 教程中的这个编译错误是什么?
我从 TMB教程页面复制了 C++ 代码
并将其保存为tutorial.cpp
. 然后我尝试按照说明编译它并得到:
此外,在 RStudio 编辑器窗口中,我可以在行旁边看到一个叉Type objective_function<...
号,将鼠标悬停在错误上:
我应该怎么做才能修复它以便教程函数编译?
会话信息:
c++ - 如何在我的 TMB .cpp 文件中包含更多目标函数?
TMB 目标函数似乎定义在一个保存到<name>.cpp
文件的功能块中。然后,在编译文件之后,通过使用命令加载来访问每个目标函数dyn.load(dynlib(<name>))
。
.cpp
是否可以在每个文件中存储多个目标函数?例如以下两个目标函数非常相似,但此时需要保存到不同的文件中:
和
r - 如何在 TMB .cpp 文件中找出目标函数所需的参数和数据的名称?
在TMB 教程中,在一个.cpp
文件中定义了目标函数,以便在 C++ 函数和从 R 调用的函数之间共享参数名称和模型数据结构的名称。例如,tutorial.cpp
文件:
编译后dyn.load
可以从 R 中调用这个函数,但是,你需要知道数据向量被命名为x
,并且有两个参数值mu
和sigma
。是否可以从 R 中检索这些所需对象的名称?
r - 使用 TMB 进行优化时,这个 outermgc 消息是什么?
在使用 TMB 生成目标函数和梯度并调用该optim
函数后,我在控制台中打印出一系列报告,其格式似乎为“outer mgc:”:
似乎较小的数字表示更快的收敛和更好的收敛结果。但我不完全确定这些是什么,因此最好知道以诊断算法的收敛特性。
r - 在 R 包和 CRAN 检查中分发 TMB 函数
我在 /src 中有 9 个 cpp 文件 - 8 个来自 Rcpp,1 个来自 TMB。我可以编译所有代码并成功运行代码,或者通过 CRAN 检查。但不是两者兼而有之。
方法一
让 R 编译所有 cpp 文件并生成单个 DLL:“mypackage.dll”和TMB::MakeADfun(..., DLL="mypackage")
:
- 通过所有 CRAN 检查(除了安装包大小的注释,见下文)。
- Rcpp 函数工作正常
- 调用 TMB 函数会导致:
Error in .Call("getParameterOrder", data, parameters, new.env(), PACKAGE = DLL) : "getParameterOrder" not available for .Call() for package "mypackage"
- 使用
TMB::MakeADFun(..., DLL="mypackage", checkParameterOrder=FALSE)
结果:Error in .Call("TMBconfig", e, as.integer(1), PACKAGE = DLL) : "TMBconfig" not available for .Call() for package "mypackage"
方法二
按照这个建议使用 'makevars.win' ,添加useDynLib MyTMB
并TMB::MakeADfun(..., DLL="MyTMB")
创建两个 DLL(mypackage.dll 和 MyTMB.dll):
makevars.win:
- Rcpp 和 TMB 功能都有效
devtools::check() 会对每个 Rcpp 函数产生一个警告:
/li>- 和一个关于大安装包大小的注释。
libs
子目录超过 30 Mb,大约是方法 1 的两倍。
Rcpp 开发人员建议不要使用 makevars 文件,显然我正在覆盖 Rcpp 中的某些内容以导致“外部函数调用”问题,即使该包是当前包。看来我的选择是:
- 修改“makevars”以恢复避免警告的 Rcpp 默认值,并恳求 CRAN 接受有关已安装包大小的说明。不知道如何做前者。
- 找到解决方法 1 问题的方法,并请求安装较小的包大小。将是只有一个 dll 的最简单的解决方案。不确定问题是否是因为我同时编译 Rcpp 和 TMB 而引起的,如果是,如何解决。
- 或其他我想念的东西。
有什么建议么?
详细信息:
平台 x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 3.3
c++ - 如何查看和复制 R 默认 Makevars 配置?
我没有~/.R/Makevars
文件并且
然而,R
必须从某个地方读取配置,因为包子目录.cpp
中包含Rcpp
导出的文件src
可以正常编译。
我很想知道如何Makefile.win
在src
目录中编写 a 以便Rcpp
文件与文件一起继续编译TMB
.cpp
。目前一个makefile像:
可以很好地编译TMB
文件,实际上是由以下建议的:https ://github.com/kaskr/adcomp/issues/43
我试图在此处makefile
修改Dirk 的建议,但即使使用全新的测试包也无法复制' 的默认行为。R
我的会话信息:
r - 为什么在 for 循环中调用 dyn.load 会使我的 R 会话崩溃?
dyn.load()
R(3.3.2,Windows 7)在 for 循环中使用大约 1000 次迭代后崩溃。这在 Ubuntu 中不会发生。dll
对于从Rcpp
和代码创建的文件,可以观察到这种行为TMB
,但我认为它与这些包中的任何一个都无关。崩溃消息是:
以下是我计算机上的一个最小可重现示例:
首先,创建一个Rcpp
名为的包testRcppRepeatDynLoad
(在 Rstudio 中,在新目录中创建包,选择“使用 Rcpp 创建包”。)。构建包时会在文件夹中CTRL-SHIFT-B
创建一个dll
文件src
,我们将使用dyn.load
.
此代码在 1050 次迭代后使 R 会话崩溃:
同样的事情发生dll
在由TMB::compile
.
c++ - 在 R 包中包含 TMB c++ 代码的指南
我最近发现了 TMB 的奇妙之处,并且我正在开发一个包,该包理想地包含 TMB c++ 模板,用于计算相当昂贵的模型。
我假设有以下可能性:
- 在安装包时自动编译 TMB 源代码
但我在 TMB 文档中找不到任何明确的指导方针。到目前为止,我的替代方法是编写在第一次调用使用未编译类的函数时编译 TMB 代码的函数……但我觉得有更好的方法来做到这一点。
有没有人成功地将 TMB 功能包含在另一个包中,并且可以指出相关文档或示例的方向?
c++ - 来自 TMB 的“错误范围分量”错误消息(未计算最大梯度分量)
亲爱的所有 TMB 热心用户或在 R 中使用 C++ 的用户将帮助我。
作为一名 TMB 婴儿用户,我对来自 TMB 的错误消息有疑问。
我发现我的代码中有错误。(第2个错误已修改)
结果来自 gdbsource()
1:Incomplete final line found on
我的cpp文件(其实这是一个警告信息,而不是错误。我想知道为什么会这样。)
2:编译后出现以下错误消息:
Error in ev(obj$env$par): Wrong range component.
您对第二个错误有任何想法吗?
感谢您的努力、反馈、提示和提前帮助!
我附上了我的 cpp、R 代码和数据。
我想在此页面上发布更多内容。我的代码中的主要问题被认为是定义参数或向量。
在评论之后,我运行了包含“cout”部分的代码。和结果
CPP代码(修订)
数据
我还附上了 sessioninfo: