问题标签 [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.

0 投票
2 回答
687 浏览

c++ - 将 g++ 编译错误消息从 TMB 库导出到文本文件

我正在尝试在 R 中使用 gcc (c++) 编译模型(使用 TMB 包)。错误如此之多,以至于在 Rstudio 中,我什至无法向上滚动查看它们的开头。因此,我想将控制台中的所有内容(消息、错误和警告)打印到文本文件中。这样我还可以比较不同的模型输出(或者特别是它们的失败)。

我尝试了以下事情:

=> 给我一个空文件(我或多或少预期)

=> 只打印最终错误

我忽略了什么?

0 投票
1 回答
999 浏览

c++ - TMB 教程中的这个编译错误是什么?

我从 TMB教程页面复制了 C++ 代码

并将其保存为tutorial.cpp. 然后我尝试按照说明编译它并得到:

此外,在 RStudio 编辑器窗口中,我可以在行旁边看到一个叉Type objective_function<...号,将鼠标悬停在错误上:

我应该怎么做才能修复它以便教程函数编译?

会话信息:

0 投票
2 回答
414 浏览

c++ - 如何在我的 TMB .cpp 文件中包含更多目标函数?

TMB 目标函数似乎定义在一个保存到<name>.cpp文件的功能块中。然后,在编译文件之后,通过使用命令加载来访问每个目标函数dyn.load(dynlib(<name>))

.cpp是否可以在每个文件中存储多个目标函数?例如以下两个目标函数非常相似,但此时需要保存到不同的文件中:

0 投票
2 回答
111 浏览

r - 如何在 TMB .cpp 文件中找出目标函数所需的参数和数据的名称?

TMB 教程中,在一个.cpp文件中定义了目标函数,以便在 C++ 函数和从 R 调用的函数之间共享参数名称和模型数据结构的名称。例如,tutorial.cpp文件:

编译后dyn.load可以从 R 中调用这个函数,但是,你需要知道数据向量被命名为x,并且有两个参数值musigma。是否可以从 R 中检索这些所需对象的名称?

0 投票
1 回答
672 浏览

r - 使用 TMB 进行优化时,这个 outermgc 消息是什么?

在使用 TMB 生成目标函数和梯度并调用该optim函数后,我在控制台中打印出一系列报告,其格式似乎为“outer mgc:”:

似乎较小的数字表示更快的收敛和更好的收敛结果。但我不完全确定这些是什么,因此最好知道以诊断算法的收敛特性。

0 投票
0 回答
430 浏览

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 MyTMBTMB::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

0 投票
1 回答
2042 浏览

c++ - 如何查看和复制 R 默认 Makevars 配置?

我没有~/.R/Makevars文件并且

然而,R必须从某个地方读取配置,因为包子目录.cpp中包含Rcpp导出的文件src可以正常编译。

我很想知道如何Makefile.winsrc目录中编写 a 以便Rcpp文件与文件一起继续编译TMB .cpp。目前一个makefile像:

可以很好地编译TMB文件,实际上是由以下建议的:https ://github.com/kaskr/adcomp/issues/43

我试图在此处makefile修改Dirk 的建议,但即使使用全新的测试包也无法复制' 的默认行为。R

我的会话信息:

0 投票
0 回答
218 浏览

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.

0 投票
2 回答
890 浏览

c++ - 在 R 包中包含 TMB c++ 代码的指南

我最近发现了 TMB 的奇妙之处,并且我正在开发一个包,该包理想地包含 TMB c++ 模板,用于计算相当昂贵的模型。

我假设有以下可能性:

  • 在安装包时自动编译 TMB 源代码

但我在 TMB 文档中找不到任何明确的指导方针。到目前为止,我的替代方法是编写在第一次调用使用未编译类的函数时编译 TMB 代码的函数……但我觉得有更好的方法来做到这一点。

有没有人成功地将 TMB 功能包含在另一个包中,并且可以指出相关文档或示例的方向?

0 投票
0 回答
222 浏览

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: