2017-04-20 1 views
0

J'ai des objets 'xts', près de 600, et je veux les fusionner en un objet 'xts'object.Fusion d'un grand nombre d'objets xts

Les noms de ces objets sont quelque chose comme mfi0, mfi1, mfi2, .... Je peux écrire fusionner commande pour quelques objets tels que

a<-merge(mfi0,mfi1,mfi2) 

mais mon problème est que je ne pouvais pas écrire un loop ou lapply 600 objets, chaîne contenant « mfi » et un certain nombre, j'ai essayé mais paste ne pouvait pas écrire.

+1

' obj <- paste0 ("mfi", 1: 600); obj_list <- lapply (obj, get); do.call (fusionner, obj_list) ' –

+0

alternativement,' code <- paste0 ("fusionner (", paste0 ("mfi", 1: 600, collapse = ","), ")"); eval (parse (text = code)) ' –

+0

Cela fonctionne. Merci beaucoup. – linmu

Répondre

2

D'où proviennent ces objets? Il est préférable d'utiliser une liste dans le processus de génération au lieu de 600 variables distinctes. Ainsi, au lieu d'avoir mfi0, mfi1, ..., mfi600 vous devriez avoir mfi[1], mfi[2], ..., mfi[600].

Avoir toutes vos données aide beaucoup à le gérer. La procédure de fusion est maintenant beaucoup plus simple en utilisant votre propre commande de fusion:

merged_mfi <- do.call(merge, mfi) 

ou en utilisant une commande de fusion qui ne gère que deux objets (la R fusion pour data.frames):

merged_mfi <- Reduce(merge, mfi[2:length(mfi)], mfi[1]) 
+0

Je veux calculer l'indice de flux monétaire (MFI) pour 636 tickers, je récupère les tickers avec pdfetch paquet 'sp <- pdfetch_YAHOO (identifiants [1: 636], c (" haut "," bas "," fermer "," volume ", from = as.Date (" 2012-01-01 "), to = as.Date (" 2016-12-30 ")', alors j'ai utilisé MFI du paquet TTR, j'ai écrit deux fonctions, 'HLC < -fonction (i) {sp [, (1+ (4 * i)) :(3+ (4 * i))]} Volume <-fonction (i) {sp [, 4 * i + 4]} ' 'bibliothèque (TTR)' 'pour (i dans 0: 636) {nom <- paste (" mfi ", i, sep =" ") assign (nom, MFI (HLC (i), Volume (i), 0) } ' – linmu

+0

Au lieu de' assign (nam, MFI (...)) 'vous pouvez utiliser' mfi [i] <- MFI (...) 'après avoir initialisé' mfi <- list() ' – Pieter

+0

Dans presque tous les cas, il est mauvais de générer des noms de variables lors de l'exécution de yo votre code. Utilisez une liste, des tableaux, des matrices, des noms de données, des collections, des dictionnaires ou n'importe quelle structure de données semblable dans de telles circonstances. – Pieter