Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加速循环,根据前一行迭代计算值,排除不符合R中条件的行_R_Performance_Loops - Fatal编程技术网

加速循环,根据前一行迭代计算值,排除不符合R中条件的行

加速循环,根据前一行迭代计算值,排除不符合R中条件的行,r,performance,loops,R,Performance,Loops,我是R的新手,目前在R中执行循环时遇到困难。就我而言,R中缓慢的循环是由于“编程不好”。这里很可能也是这样(尽管我一直在尽力) 在如何提高循环效率方面,我遇到了一些建议,例如数据帧的矢量化。由于我对给定投标报价行的计算取决于先前验证的投标报价(而当前报价又基于计算进行验证),因此我无法找出如何使矢量化成为可能 我的数据由时间间隔不规则的买卖报价组成。在进一步的数据处理之前,我需要使用“离群值过滤器”对异常和离群值的刻度进行过滤,如Dacorogna,M.M.,Müller,U.A.,Nagler

我是R的新手,目前在R中执行循环时遇到困难。就我而言,R中缓慢的循环是由于“编程不好”。这里很可能也是这样(尽管我一直在尽力)

在如何提高循环效率方面,我遇到了一些建议,例如数据帧的矢量化。由于我对给定投标报价行的计算取决于先前验证的投标报价(而当前报价又基于计算进行验证),因此我无法找出如何使矢量化成为可能

我的数据由时间间隔不规则的买卖报价组成。在进一步的数据处理之前,我需要使用“离群值过滤器”对异常和离群值的刻度进行过滤,如Dacorogna,M.M.,Müller,U.A.,Nagler,R.J.,Olsen,R.B.,Pictet,O.V.(1993)所建议的那样。外汇市场每日和每周季节波动的地理模型。(过滤器在其附录中提供)。要计算条件,我需要“当前”投标报价和最后验证的投标报价。基于这些条件,我随后(在)验证当前的投标报价

我目前的方法是:假设第一个投标报价,
df[1,]
,是经过验证的。然后迭代计算投标报价的条件(B条件I、B条件II、C条件I、C条件I、C条件II、C条件II)和验证(由if语句捕获)。如果未验证“当前”投标报价,我将从数据框中排除相应的行。否则,我将保持数据帧完整。我的基本原理是,或者最初是,对于
i+1
,将自动验证更新数据框中的前一行

i <- 2
while (i<=nrow(df)){
  #for (i in seq(2,nrow(df)) ){
  #
  *#calculates the distance to previous, validated bid quote*
  df$dBidQuoteABS_V[i]<-abs(as.numeric(df$BidQuote[i]-df$BidQuote[i-1]))
  df$BConditionI[i]<-ifelse(df$dBidQuoteABS_V[i] < 0.25,1,0)
  df$dT[i]<-as.numeric(df$DateTime[i]-df$DateTime[i-1])
  df$dT[i]<-df$dT[i]/(24*60*60)
  df$BConditionII[i]<-ifelse(df$dBidQuoteABS_V[i]<2*df$spread[i-1]+0.18*df$dT[i],1,0)
  df$SConditionI[i]<-ifelse(0.0001<df$spread[i] &df$spread[i]<0.025,1,0)
  df$SConditionII[i]<-ifelse(df$dBidQuoteABS_V[i]<1.3+45*df$dT[i],1,0)
  df$SConditionIII[i]<-ifelse(df$dBidQuoteABS_V[i]<4,1,0)
  if(df$BConditionI[i]==0 |df$BConditionII[i]==0| df$SConditionI[i]==0|df$SConditionII[i]==0|df$SConditionIII[i]==0) {
    df<-df[-i, ]
  } else{
    df<-df
  }
  rownames(df) <- seq(length=nrow(df))
  i <- i+1
} 
   DateTime Bid Quote  Ask Quote dBidQuote dT     Validated
1. T1       B1         A1        -         -        YES
2. T2       B2         A2        A2-A1     T2-T1    YES
3. T3       B3         A3        A3-A2     T3-T2     NO #I therefore 'exclude this row in the loop
4. T4       B4         A4        A4-A2     T4-T2    YES  #As the previous row is not validated, the differences will be taken wrt. the validated row 3.