首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TMB的C++,但不是针织中的Rcpp

TMB的C++,但不是针织中的Rcpp
EN

Stack Overflow用户
提问于 2019-03-08 08:50:49
回答 1查看 111关注 0票数 1

我正在使用包括C++代码的code编写一个文档。此代码将与R包TMB一起使用。我使用的是.Rnw文档。

我的主要问题是我不知道为代码块引擎指定什么。我读过一些关于非R语言的设置的问题,但我的理解是,在code中只支持Rcpp,而不是简单的C++代码。另外,这里我想通过TMB编译C++代码。在理想的情况下,我希望在编译compile文档时,.cpp文件是在工作目录中创建的,以便TMB可以在以后访问它们。但是现在,当我编译compile文档时,我得到了以下警告:

在引擎中(选项$get_engine):未知语言引擎'cpp‘(必须通过knit_engines$set()注册)。

这里有一个简单的例子。

代码语言:javascript
复制
\documentclass{article}

\begin{document}

<<setup, include=FALSE>>=
library(knitr)
  @


<<tmbcpp, eval=FALSE, tidy=FALSE, engine='cpp'>>=
#include <TMB.hpp>

template<class Type>
Type objective_function<Type>::operator() ()
{
    DATA_MATRIX(y); 
    PARAMETER(logitGamma); // Autocorrelation

    Type nll = 0.0;

    return nll;
}

@

<<compileTMB, cache=TRUE, results="hide">>=
library(TMB)
compile("tmbcpp.cpp", flags="-Wno-unused-variable")
dyn.load(dynlib("tmbcpp"))
@

\end{document}

请注意,这里我不是在评估C++代码,我认为这可以解决问题,但似乎还不够。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-09 02:36:52

我想我找到了一个完美的解决方案。按照Ben Bolker的建议使用Rcpp引擎,并按照herehere的讨论使用钩子来编写代码块。

代码语言:javascript
复制
\documentclass{article}
\begin{document}

<<setup, include=FALSE>>=
library(knitr)
# To write code chunk to the working directory
knitr::knit_hooks$set(write_chunk = function(before, options, envir) {
    if (before) {
      fileConn <- file(options$label)
      writeLines(options$code, fileConn)
      close(fileConn)
    }
})
@


<<tmbcpp.cpp, write_chunk=TRUE, eval=FALSE, tidy=FALSE, engine='Rcpp'>>=
#include <TMB.hpp>

template<class Type>
Type objective_function<Type>::operator() ()
{
    DATA_MATRIX(y); 
    PARAMETER(logitGamma); // Autocorrelation

    Type nll = 0.0;

    return nll;
}

@

<<compileTMB, cache=TRUE, results="hide">>=
library(TMB)
compile("tmbcpp.cpp", flags="-Wno-unused-variable")
dyn.load(dynlib("tmbcpp"))
@

\end{document}

这不会给出任何警告或错误,只要您安装了AndréSimon提供的highlight包:http://www.andre-simon.de/。此外,它将文件保存在工作目录中,然后TMB可以访问该目录进行编译和加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55055168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档