2016-06-02 2 views
0

다른 폴더의 txt 파일을 RData 형식으로 변환하는 루프를 작성하려고했습니다. 파일의 이름이 같으므로 조건에 따라 파일의 이름을 바꾸고 하나의 폴더에 저장하려고합니다. 루프는 작업을 수행하지만 모든 파일에 대해 동일한 데이터 프레임 이름을 저장합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?다른 데이터 프레임 이름을 가진 루프에서 RData 형식으로 변환

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    save <- read.table(load, sep="|", header=T) 
    save(save, file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    }} 
+0

나는 그것을했다, 그것은 오타였다. 매번 다른 파일을 읽을 때 문제는 df 파일의 이름입니다 ... – Mateusz

+1

'save()'에서 비표준 평가가 진행 중입니다. df의 이름은 저장되고있는 객체의 이름으로 주어 지는데, 이것은'save'와 같은 반복문의 반복마다 존재합니다. 대신 saveRDS()를 사용하거나 save()에 첫 번째 인수 대신 두 번째 인수를 사용하여 저장할 데이터 프레임을 지정할 수 있습니다. – Thomas

답변

0

다음 코드 조정은 트릭을 수행해야한다고 생각합니다.

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    assign(x = save, 
      value = read.table(load, sep="|", header=T)) 
    eval(bquote(
     save(.(as.name(save)), 
      file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    )) 
    eval(bquote(rm(.(as.name(save))))) 
    }} 

assign α- 함수는 파일의 내용이 당신의 save -object의 현재 가치에 할당되도록합니다.

eval + bquote + .() + as.name 건설은이 save -object를 저장, 오히려 그 이름에 저장된 객체를 저장하지 않도록는 save α- 함수에 대한 호출을 생성 (및 평가)하는 데 사용됩니다 save.

끝에있는 rm의 사용은 파일의 내용으로 작업 공간이 복잡해지고 (메모리를 바인딩하는) 피하기 위해 포함됩니다.

관련 문제