2011-10-13 1 views
3

Salut ma structure XTS est:Remplacer une boucle avec appliquer la fonction familiale sur un 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 

J'ai une fonction getTickSize(x,date) qui est conçu pour x comme un seul numérique (pas un tableau).

Je voudrais si possible de remplacer les éléments suivants pour la boucle par un « intelligent » appel à la famille appliquer des fonctions

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

Tout pointeur? toutes mes tentatives ont été remplies avec les avertissements suivants:

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

Je vous recommande de réécrire votre fonction 'getTickSize' pour fonctionner sur des tableaux. –

+0

Merci pour la suggestion de tout lien ou pointeur vers "vectoriser" une fonction? – qaTK

Répondre

1

je crois dans ce cas, mapply est la solution la plus simple:

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

Note: la famille *apply des fonctions ne sont pas toujours mieux qu'un simple boucle (la plupart du mythe autour de cette date remonte à la première version de S).

Mais j'avoue que ça a l'air beaucoup plus sexy.

+0

Merci, fonctionne comme prévu. Aussi, comme prévu, aucun gain de performance, mais un code plus sexy. – qaTK

Questions connexes