Замените цикл for на функцию apply family на 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 «умным» вызовом семейства функций apply

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 

r xts
person qaTK    schedule 13.10.2011    source источник
comment
Я бы рекомендовал вам переписать вашу функцию getTickSize для работы с массивами.   -  person Joshua Ulrich    schedule 13.10.2011
comment
Спасибо за предложение любой ссылки или указателя на векторизацию функции?   -  person qaTK    schedule 14.10.2011


Ответы (1)


Я считаю, что в этом случае mapply - самое простое решение:

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

Примечание: семейство функций *apply не всегда лучше, чем простой цикл (большая часть мифов об этом восходит к ранней версии S).

Но я признаю, что это выглядит намного сексуальнее.

person Nick Sabbe    schedule 13.10.2011
comment
Спасибо, работает как положено. Также, как и ожидалось, никакого прироста производительности, но более привлекательный код. - person qaTK; 14.10.2011