2017-10-12 4 views
0

J'ai un script qui prend des fichiers CSV bruts dans un dossier, transforme les données dans une méthode décrite dans une fonction (nom de fichier) appelée "analyser", et crache des valeurs dans la console. Quand j'essaye d'écrire ces valeurs, elles donnent seulement la dernière valeur de la fonction. SI il y avait une quantité définie de fichiers par dossier, je ferais juste chaque fichier csv spécifique à travers le programme, disons [1: 5], et lapply/définir une matrice dans write.csv. Cependant, il y a un potentiel pour une quantité infinie de fichiers tirés du répertoire, donc cela ne fonctionnera pas (je pense?). Comment exporter des sorties de fonctions potentiellement infinies vers un fichier csv? J'ai énuméré ci-dessous mes étapes finales après la définition de la fonction. Il répertorie tous les fichiers dans le dossier et applique la fonction "anaylze" à tous les fichiers du dossier.R: Exporter des sorties de fonctions potentiellement infinies vers un fichier csv

filename <- list.files(path = "VCDATA", pattern = ".csv", full.names = TRUE) 
for (f in filename) { 
print(f) 
analyze(f) 
} 

Best, Evan

+1

Peut-être 'capture.output'? Ou «couler»? – Gregor

+1

Plutôt que des "sorties potentiellement infinies", vous pourriez vouloir dire "un nombre inconnu de sorties". – Gregor

Répondre

0

Il est difficile de dire sans exemple reproductible, mais je pense que vous avez affecter la sortie d'analyser à un vecteur ou un dataframe (au lieu de recracher à la console) .

Quelque chose le long de ces lignes:

filename <- list.files(path = "VCDATA", pattern = ".csv", full.names = TRUE) 
results <- vector() #empty vector 

for (f in filename) { 
print(f) 
results[which(filename==f)] <- analyze(f) #assign output vector 
} 

write.csv(results, file=xxx) #write csv file when loop is finished 

J'espère que cela répond à votre question, mais cela dépend vraiment sur le format de la sortie de la fonction d'analyse.