在 RStudio 0.99 上使用 BH 包的 Rcpp 函数中出现提升日期问题

Trouble with boost dates in Rcpp functions using BH package on RStudio 0.99

我在使用 Rcpp 函数时遇到了一些问题,这些函数在 RStudio 0.99 上 运行 时使用了 boost objects。此问题不会出现在以前版本的 RStudio (0.98) 中,也不会出现在 R 控制台中。

这是我正在使用的 cpp 文件的示例。有两个简单的函数,f1 不使用任何提升日期,f2 有一些涉及日期的基本操作:

// [[Rcpp::depends(BH)]]
#include <Rcpp.h>

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/gregorian/gregorian_types.hpp>

using namespace Rcpp;
using namespace boost::posix_time;
using namespace boost::gregorian;
using namespace boost::local_time;

// [[Rcpp::export]]
int f1(int x, int y)
{
return x+y;
}

// [[Rcpp::export]]
int f2(const int hour, const int day, const int month, const int year) {

ptime pt(date(year,month,day), hours(hour));
time_zone_ptr zone(new posix_time_zone("UTC"));
local_date_time fecha(pt, zone);

double HoraUTC = fecha.utc_time().time_of_day().total_seconds() / 3600.0;

return HoraUTC;
}

通过 Rcpp::sourceCpp 编译工作正常,返回有关 BH 头文件之一的警告:

C:/R/RCurrent/library/BH/include/boost/datetime/posixtime/posixtimeconfig.hpp:73:79: warning: 'result' may be used uninitialized in this function [-Wuninitialized]

函数f1运行正常,但调用f2时,出现典型的Rsession崩溃。正如我之前所说,这在 R 控制台和使用以前版本的 RStudio 中都不会发生。

Session 信息:

sessionInfo()
R version 3.2.0 (2015-04-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LCCOLLATE=SpanishSpain.1252 LCCTYPE=SpanishSpain.1252 LCMONETARY=SpanishSpain.1252
[4] LCNUMERIC=C LCTIME=Spanish_Spain.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] Rcpp_0.12.0

loaded via a namespace (and not attached):
[1] tools3.2.0 BH1.58.0-1

有什么想法吗?

谢谢!

修复了两个简单的错误(posix_timelocal_time 中都缺少下划线)后,您的代码在这里工作正常——[=17 上所有当前版本的 R、Rcpp 和 BH =] 15.04:

R> sourceCpp("soquestion.cpp")

R> f1(2,3)
[1] 5

R> f2(12, 12, 12, 2015)
[1] 12
R> 

也许发生了什么事使您的(二进制?)包安装出现问题。您始终可以从源安装...