小编use*_*424的帖子

R中可能使用Rcpp的大型数据文件的优化循环

我在R中有一个循环,它很慢(但可以)。目前,此计算在我的笔记本电脑上大约需要3分钟,我认为它可以改进。最终,我将遍历许多基于此代码结果运行计算的数据文件,并且我希望尽可能使当前代码更快。

基本上,对于每个日期,对于11个不同的X值,循环都会获取最近X年的降雨值(Y),找到线性反权重(Z),以便最古老的降雨值的加权最小,是雨的倍数(Y)和权重(Z)以获得向量A,然后将A的总和作为最终结果。这完成了数千个日期。

但是,我想不出任何办法或以任何方式寻求建议,以使其在R中更快,因此我尝试在Rcpp中重写它,但我对此知之甚少。我的Rcpp代码没有完全复制R代码,因为结果矩阵与应有的矩阵不同(错误)(out1 vs out2;我知道out1是正确的)。似乎Rcpp代码更快,但是我只能使用几列进行测试,因为如果我尝试运行所有11列(i <= 10),它就会开始崩溃(RStudio中的致命错误)。

我正在寻找有关如何改进R代码和/或更正Rcpp代码以提供正确结果而不会在过程中崩溃的反馈。

(尽管我下面发布的代码未显示出来,但数据仍以[作为数据框的形式]加载到R中,用于在所示代码之外进行的一些计算。对于此处显示的特定计算,仅列使用了数据帧中的2个。)

数据文件位于以下位置:https : //drive.google.com/file/d/0Bw_Ca37oxVmJekFBR2t4eDdKeGM/view?usp=sharing

尝试R

library(readxl)

library(readxl)
library(Rcpp)
file = data.frame(read_excel("lake.xlsx", trim_ws=T)
col_types=c("date","numeric","numeric","date",rep("numeric",4),"text")))
file[,1] = as.Date(file[,1], "%Y/%m/%d", tz="UTC")
file[,4] = as.Date(file[,4], "%Y/%m/%d", tz="UTC")

rainSUM = function(df){
rainsum = data.frame("6m"=as.numeric(), "1yr"=as.numeric(), "2yr"=as.numeric(), "3yr"=as.numeric(), "4yr"=as.numeric(), "5yr"=as.numeric(), "6yr"=as.numeric(), "7yr"=as.numeric(), "8yr"=as.numeric(), "9yr"=as.numeric(), "10yr"=as.numeric()) # create dataframe for storing the sum of weighted last d values

  Tdays <- length(df[,1])

  for(i in 1:11) {           # loop through the lags
    if (i==1) {
      d <- 183               # 6 …
Run Code Online (Sandbox Code Playgroud)

performance loops r rcpp

5
推荐指数
1
解决办法
339
查看次数

标签 统计

loops ×1

performance ×1

r ×1

rcpp ×1