gpt4 book ai didi

c++ - 将 R 翻译成 Rcpp : mean time difference between successive dates in vector

转载 作者:行者123 更新时间:2023-11-30 01:42:18 24 4
gpt4 key购买 nike

我有一个 R 函数,它接受一个排序日期(降序)的 vector ,返回 vector 中连续日期之间的平均时间差。我正在尝试将此 R 函数转换为 Rcpp 函数。

这是我目前所拥有的:

sorted_dates <- as.Date(c("2015-09-25", "2015-06-12",
"2015-06-12", "2015-03-26"))

mean_time_difference <- function(sorted_dates){
### Takes a vector of dates sorted in descending order
### Returns the mean time difference between dates.

time_differences <- integer()
for(i in 1:(length(sorted_dates) - 1)){
time_differences[i] <- as.integer( sorted_dates[i] - sorted_dates[i+1])
}

return(mean(time_differences))

}

这是我目前对 Rcpp 的错误翻译:

cppFunction('double mean_time_diff(DateVector sorted_dates) {
/* Takes a vector of dates sorted in descending order
*/ Returns the mean time difference between dates.

int n = sorted_dates.size();
IntegerVector time_diff;

for(int i=1; i < (n-1); i++){
time_diff.push_back( sorted_dates[i] - sorted_dates[i+1] );
}

int m = time_diff.size();
double total = 0;
for(int i=1; i < m; i++) {
total += time_diff[i];
}

return total / m;

}')

mean_time_difference(sorted_dates)
mean_time_diff(sorted_dates)

我确信 R 和 Rcpp 函数都有很多可以改进的地方。谁能告诉我如何在 Rcpp 中最好地实现该功能?

最佳答案

这就是您要寻找的,采用简单的 R 方法:

> sorted_dates <- as.Date(c("2015-09-25", "2015-06-12", 
+ "2015-06-12", "2015-03-26"))
> mean(diff(sorted_dates))
Time difference of -61 days
> mean(as.numeric(diff(sorted_dates)))
[1] -61
>

可以使用 Rcpp 执行这些操作,但您可能在基础 R 中或使用任何附加聚合实用程序执行这些操作——我喜欢 data.table。

关于c++ - 将 R 翻译成 Rcpp : mean time difference between successive dates in vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39842445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com