0

我是 Rcpp 的新手,但我有一个与日期和日期时间相关的任务。让我在我的 Rcpp 函数中的 DataFrame 中有市场数据。因此,日期字段的格式如下:

2016-04-19 00:01:00

包含日期值的数据框字段名称是“日期”。所以,我得到 2 个向量:

DatetimeVector datetime = df["Date"];
DateVector pureDate = df["Date"];

问题:

1)我不能区分 Date 的 2 个 Date 值(我不知道为什么,但是 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)如何格式化DateDatetime对象的输出?to_string不会很好地格式化它 - 我给出这样的结果:1461176460.000000

3) 我希望语法 likeDate(datetime[i])会给我一个Date对象。但它不会。我知道这pureDate[1] - pureDate[0]应该具有相同的Y-M-D值,但它们在系列滞后(60 秒)方面有所不同。

谢谢。谁能帮我解决这些问题?

4

1 回答 1

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包具有日期和日期时间的功能......

于 2018-03-20T12:17:40.807 回答