【发布时间】:2023-01-10 01:26:47
【问题描述】:
出于紧固目的,我试图将 R 中的简单“for 循环”转换为 Rcpp 循环。
我有一个名为“date_vector”的日期向量,它由 X 个相同的日期组成。 对于 i 的每次迭代,我将 1 分钟添加到 date_vector 值。 R 'for 循环'(见下文)工作正常,但对于我非常大的数据集(2 年 ~ 100 万行)来说它太慢了。
我读过 Rccp 可能是加速循环的解决方案。 但是,我是一个“Rcpp”菜鸟,我正在努力转换我的循环。
有人可以帮助我并向我解释解决方案吗?非常感谢你! 祝 2023 年一切顺利。
原来的 R 循环:
for(i in 2:nrow(klines)){
date_vector[i] <- date_vector[i-1]+minutes(1)
}
我的 Rcpp 循环尝试:
cpp_update_date_vector <- cppFunction('DateVector fonction_test(DateVector zz),
int n = zz.size();
DateVector = date_vector;
for (int i = 0; i < n; i++) {
date_vector[i] = date_vector[i-1] + 60;
}
')
【问题讨论】:
-
你在这里不需要循环。只需使用
date_vector[1] + lubridate::minutes(seq(nrow(klines)) - 1)。这已经在 C 级别进行了矢量化,因此在 Rcpp 中重新发明轮子几乎没有任何好处。