我在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
有什么想法吗?
谢谢!
答案 0 :(得分:2)
修复了两个简单的错误(你在posix_time
和local_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>
也许发生了一些让你的(二进制?)软件包安装失败的事情。您始终可以从源代码安装...