我是Rcpp的新手,但我有一个与Date和Datetime相关的任务。 让我在我的Rcpp函数中的DataFrame中获取市场数据。因此,Date字段的格式如下:
2016-04-19 00:01:00
包含日期值的数据框字段名称是“日期”。所以,我得到2个载体:
DatetimeVector datetime = df["Date"];
DateVector pureDate = df["Date"];
问题:
1)我无法区分日期的2个日期值(我不知道为什么,但是gcc-4.9.3给出了我这样差异的错误:
Date pureDay = pureDate[0];
auto tmp = pureDate[j+1] - pureDay;
错误:'operator-'的模糊重载(操作数类型是 'Rcpp :: traits :: storage_type< 14> :: type {aka double}'和'Rcpp :: Date') auto tmp = tmpDate [j + 1] - tmpTradeDay;
但如果我使用这样的代码:
Date pureDay = pureDate[0];
auto tmp = pureDate[j+1] - pureDate[j];
效果很好。
2)如何格式化Date
和Datetime
个对象的输出? to_string
不会很好地格式化 - 我会给出这样的结果:1461176460.000000
3)我希望像Date(datetime[i])
这样的语法会给我一个Date
个对象。但事实并非如此。我知道pureDate[1] - pureDate[0]
应该具有相同的Y-M-D
值,但它们因系列滞后(60秒)而不同。
Thnxs。任何人都可以帮我解决这些问题吗?
答案 0 :(得分:1)
你似乎有点迷失,这个问题确实有很多问题。
问题1)将在下面给出一个简短的例子。
问题2)主要是关于格式化,你可能想查看类文档和标题; Date
和Datetime
都有一个format()
方法,就像日期(时间)格式化的R等价或C库函数一样,传说为strftime()
。
问题3)不清楚;我不确定你在问什么。也许下面问题1)的答案有帮助。
问题1的简单示例:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double question1(DateVector dv) {
double d = dv[1] - dv[0];
return d;
}
/*** R
set.seed(123)
datevector <- Sys.Date() + cumsum(runif(3)*30);
datevector
diff(datevector)
question1(datevector)
*/
及其结果:
R> Rcpp::sourceCpp("/tmp/datequestion.cpp")
R> set.seed(123)
R> datevector <- Sys.Date() + cumsum(runif(3)*30);
R> datevector
[1] "2018-03-28" "2018-04-21" "2018-05-03"
R> diff(datevector)
Time differences in days
[1] 23.6492 12.2693
R> question1(datevector)
[1] 23.6492
R>
与R相同的答案。您的代码仍然有一个索引计算,有时会混淆编译器。使其更简单(即更多步骤)通常会有所帮助。
最后,请查看一些Rcpp文档和示例。 RcppExamples包具有日期和日期时间功能......