使用RStudio 0.99上的BH软件包来解决Rcpp函数中的提升日期问题

时间:2015-09-03 17:06:32

标签: r boost rstudio rcpp

我在Rtpp函数上遇到一些问题,这些函数在RStudio 0.99上运行它们时会使用boost对象。在R控制台中,RStudio(0.98)的先前版本中不会发生此问题。

这是我正在使用的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时,会发生典型的R会话崩溃。正如我之前所说的,这种情况从未发生在R控制台中,也不会使用以前版本的RStudio。

会话信息:

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

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

修复了两个简单的错误(你在posix_timelocal_time中都缺少一个下划线),你的代码在这里工作正常 - 在Ubuntu 15.04上所有当前版本的R,Rcpp和BH:

R> sourceCpp("soquestion.cpp")

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

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

也许发生了一些让你的(二进制?)软件包安装失败的事情。您始终可以从源代码安装...