【问题标题】:Replace a for loop with apply family function on a xts用 xts 上的应用族函数替换 for 循环
【发布时间】:2011-12-06 16:18:57
【问题描述】:

嗨,我的 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 作为单个数字(不是数组)而设计的。

如果可能的话,我希望通过“智能”调用 apply 系列函数来替换以下 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 

【问题讨论】:

  • 我建议你重写你的 getTickSize 函数来操作数组。
  • 感谢任何指向“矢量化”函数的链接或指针的建议?

标签: r xts


【解决方案1】:

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

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

注意:*apply 系列函数并不总是比简单的循环更好(大多数关于这方面的神话可以追溯到早期版本的 S)。

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

【讨论】:

  • 谢谢,按预期工作。正如预期的那样,没有性能提升,但代码更性感。
猜你喜欢
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多