2017-01-31 1 views
0

Actuellement j'utilise le ci-dessous pour lire dans ~ 7-10 fichiers à la console R tout à la fois.Après avoir lu plusieurs fichiers dans R, comment puis-je définir les df résultant au nom de fichier?

library(magrittr) 
library(feather) 

list.files("C:/path/to/files",pattern="\\.feather$") %>% lapply(read_feather) 

Comment puis-je les acheminer dans des objets de données indépendants en fonction de leur nom de fichier unique?

ex.

accounts_jan.feather 
users_jan.feather 
-> read feather function -> hold in working memory as: 
accounts_jan_df 
users_jan_df 

Merci.

+5

Cochez '? List2env()' – Vlo

+0

Lisez la réponse de gregor à [cette publication] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data -cadres). C'est généralement une bonne idée de conserver des objets similaires dans une liste. – lmo

+0

@lmo Ceux-ci peuvent ne pas être des objets similaires (utilisateurs vs comptes) – Frank

Répondre

2

Cela ressemble à un cas d'essayer d'en faire trop avec un tuyau (https://github.com/hrbrmstr/rstudioconf2017/blob/master/presentation/writing-readable-code-with-pipes.key.pdf). Je recommande segmentant votre processus un peu:

# Get vector of files 
files <- list.files("C:/path/to/files", pattern = "\\.feather$") 

# Form object names 
object_names <- 
    files %>% 
    basename %>% 
    file_path_sans_ext 

# Read files and add to environment 
lapply(files, 
     read_feather) %>% 
    setNames(object_names) %>% 
    list2env() 

Si vous devez vraiment le faire avec un seul tuyau, vous devez utiliser à la place mapply, car il a un argument USE.NAMES.

list.files("C:/path/to/files", pattern = "\\feather$") %>% 
    mapply(read_feather, 
     ., 
     USE.NAMES = TRUE, 
     SIMPLIFY = FALSE) %>% 
    setNames(names(.) %>% basename %>% tools::file_path_sans_ext) %>% 
    list2env() 

Personnellement, je trouve la première option plus facile de raisonner quand je vais faire le débogage (je ne suis pas fan de tuyaux dans les tuyaux).

+0

J'ai dû ajouter un petit edit - 'list2env (envir = globalenv())'. Mais merci! – gscott