在xts上用apply系列函数替换for循环

时间:2011-10-13 05:21:34

标签: r xts

我的xts结构是:

head(sym)

                     BidSize  Bid  Ask    AskSize Quantity Mid
   2006-01-04 09:01:00    3771 181000 182000    5783    15625 181500
   2006-01-04 09:02:00    3952 181000 182000    5659      180 181500
   2006-01-04 09:03:00    3556 181000 182000    5943     1059 181500
   2006-01-04 09:04:00    3747 181000 182000    6133      261 181500
   2006-01-04 09:05:00    3957 181000 182000    6077      101 181500
   2006-01-04 09:06:00    3898 181000 182000    6511      311 181500

我有一个函数getTickSize(x,date),它是为x设计的单个数字(不是数组)。

我希望尽可能通过对应用函数系列的“智能”调用来替换以下for循环

for (i in 1:nrow(sym[1:10])){
    sym$TS[i] <- getTickSize(sym$Mid[i],index(sym)[i])
  }

任何指针?我的所有尝试都遇到了以下警告:

    the condition has length > 1 and only the first element will be used 

1 个答案:

答案 0 :(得分:1)

我相信在这种情况下,mapply是最简单的解决方案:

sym$TS<-mapply(getTickSize, sym$Mid, index(sym))

注意:*apply系列函数并不总是比一个简单的循环更好(大多数关于那个日期的神话回到早期版本的S)。

但我承认它看起来更性感。