在 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_time
和 local_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>
也许发生了什么事使您的(二进制?)包安装出现问题。您始终可以从源安装...
我在使用 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_time
和 local_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>
也许发生了什么事使您的(二进制?)包安装出现问题。您始终可以从源安装...