2017-01-31 8 views
0

현재 R 콘솔에 ~ 7-10 개의 파일을 한 번에 읽을 때 아래 내용을 사용하고 있습니다.R에 여러 개의 파일을 읽은 후에 어떻게 결과 df 파일 이름을 설정할 수 있습니까?

어떻게 고유 한 파일 이름을 기반으로 독립적 인 데이터 개체로이 파이프를 연결할 수 있습니까?

ex.

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

감사합니다.

+5

'? list2env()' – Vlo

+0

[이 게시물에 대한 gregor의 답변을 읽으십시오 (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data) - 프레임). 일반적으로 비슷한 개체를 목록에 보관하는 것이 좋습니다. – lmo

+0

@lmo 이들은 유사한 객체 (사용자 대 계정)가 아닐 수도 있습니다. – Frank

답변

2

이것은 파이프 (https://github.com/hrbrmstr/rstudioconf2017/blob/master/presentation/writing-readable-code-with-pipes.key.pdf)로 너무 많은 것을하려는 경우와 같습니다. 좀 프로세스를 분할하는 것이 좋습니다 것입니다 : 당신이 정말로 하나의 파이프로이 작업을 수행해야합니다 경우가 USE.NAMES 인수를 가지고, 당신은 대신 mapply를 사용해야합니다

# 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() 

.

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() 

가 개인적으로, 나는 디버깅을 할 갈 때 설득 할 첫 번째 옵션을 쉽게 찾을 수 있습니다 (I 파이프 내 파이프의 팬이 아니에요).

+0

작은 편집 - list2env (envir = globalenv())를 추가해야했습니다. 하지만 고마워! – gscott