RcppTN .cpp脚本在来源时起作用,但在库中编译时不起作用

时间:2018-10-23 15:29:55

标签: r rcpp

我正在尝试创建一个R包,该包使用来自.cpp脚本中截断法线的随机绘制。我正在使用pckage RcppTN中的rtn1函数。如果我获取代码,则该功能可以正常工作。构建软件包后,我会收到错误消息:

A

简化的.cpp代码在这里

> library(testtruncnorm)
> testtruncnorm()
Error in testtruncnorm::testtruncnorm() :
  function 'RcppTN_rtn1' not provided by package 'RcppTN'

我的NAMESPACE文件是

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppTN.h>
// [[Rcpp::depends(RcppTN)]]
#include<armadillo>
using namespace Rcpp;

//' draw truncated normal
//'
//' testtruncnorm() 
//' @return returns 2 draws from a truncated normal
// [[Rcpp::export]]
arma::vec testtruncnorm()
{
  arma::vec result = arma::ones(2);
  result[1] = RcppTN::rtn1(1, 1, 0,HUGE_VAL);
  result[2] = RcppTN::rtn1(1, 1, 0,HUGE_VAL);

  return result; 
 }

我的DESCRIPTION文件是

useDynLib(testtruncnorm, .registration=TRUE)
importFrom(Rcpp, evalCpp)
exportPattern("^[[:alpha:]]+")

我正在使用RStudio创建“带有RcppArmadillo的R包”以开始使用。 RStudio版本1.1.456。 R版本3.5.1。 Windows 10。

1 个答案:

答案 0 :(得分:2)

您必须确保附加char day[9], month[12]; //sscanf(date, "%s, %s, %d", day, month, &year); int count = sscanf(date, "%8s , %11s , %d", day, month, &year); if (count != 3) { Handle_unexpected_input_somehow(); } 。您可以使用

RcppTN
importFrom(RcppTN, rtn)

。在NAMESPACE的文档中说应该添加

RcppTN

应该具有相同的效果。