2015-10-05 4 views
0

J'ai le code suivant:Comment enregistrer les résultats de pour boucle sur liste dans une nouvelle liste sous "i" nom de vecteur?

final_results <- list() 

myfunc <- function(v1) { 
    deparse(substitute(v1)) 
} 

for (i in mylist) { 

...calculations... 


tmp_results <- as.data.frame(cbind(effcrs,weights)) 
colnames(tmp_results) <- c('efficiency',names(inputs), 
        names(outputs)) # header 
rownames(tmp_results) <- namesDMU[,1] 

#Save to list 
name_in_list <- myfunc(i) 
dea_results[[name_in_list]] <- tmp_results 

} 

Les boucles code ci-dessus à travers une liste de trames de données. Je voudrais chaque résultat donné de la boucle à stocker dans une liste séparée sous le même nom que le fichier original obtenu à partir mylist ou i

J'ai essayé d'utiliser le deparse substitute. quand je l'applique à un élément individuel mylist il ressemble à ceci:

myfunc(standard_DEA$'2010-11-11') 
[1] "standard_DEA$\"2010-11-11\"" 

Je ne sais pas quel est le problème. À l'heure actuelle, il enregistre tout sous le nom de « i » et remplace tous les vecteurs de sorte que le résultat final est une liste de 1.

Nous vous remercions à l'avance

+1

Il y a beaucoup de lignes inutiles dans votre exemple, alors que le but que vous avez en tête n'est pas très clair. Je suppose que vous devriez boucler sur les indices et non sur l'élément de la liste. J'essaierais 'listnames <-names (mylist)' avant la boucle. Ensuite, je ferais une boucle avec 'for (j dans 1: length (mylist))', définissez le 'i <-mylist [[j]]' et ensuite l'assignation finale comme 'dea_results [[listnames [j]]] <- tmp_results'. – nicola

+0

Qu'est-ce que 'myList'? Est-ce une liste de nombres? De noms de fichiers? D'autres objets? Est-ce une liste nommée, comme si ce sont les noms que vous voulez utiliser pour la nouvelle liste? –

+0

Je ne m'inquiéterais pas des noms dans la boucle. Après la boucle, 'names (dea_results) <- names_I_want' –

Répondre

0

Cela ressemble vous voulez une boucle faire.

library(dplyr) 

function_which_returns_dataframe = function(i) { 

    ...calculations... 

    tmp_results <- as.data.frame(cbind(effcrs,weights)) 
    colnames(tmp_results) <- c('efficiency',names(inputs), 
        names(outputs)) # header 
    rownames(tmp_results) <- namesDMU[,1] 
    tmp_results 
} 


data_frame(mylist = mylist, 
      name = names(mylist)) %>% 
    group_by(mylist, name) %>% 
    do(function_which_returns_dataframe(.$mylist[[1]]))