2016-09-11 4 views
3

나는 압축을 풀고있는 zip 파일을 가지고 있습니다. for 루프를 사용하여 작업 디렉토리의 디렉토리를 탐색 한 다음 작업 디렉토리를 방금 풀었을 새 디렉토리로 변경합니다 . 그러나, 그것을 좋아하지 않는 것 같습니다.R for using 루프를 사용하는 작업 디렉토리

아래 두 코드는 내가 사용했던 두 가지 코드입니다. 그 중 하나는 오류로 끝나고 두 번째 코드는 내가 원하는 것을 수행하지 않습니다. 파이썬 로직을 섞어 놓은 것 같아요? 다음과 같이

for (i in list.files("./")){ 
    if (endsWith(tolower(i),"zip")){ 
    unzip(i) 
    cat("Unzipped",i,"\n") 
    } 
} 

for (i in list.dirs(getwd())){ 
    cat("This is i",i,"\n") 
    Root <- setwd(i) 
    cat("This is ROOT",Root,"\n") 

} 

print(Root) 

나는 위의 코드를 실행 얻을 결과는 다음과 같습니다 당신이 볼 수 있듯이

This is i F:/Testing with R 
This is ROOT F:/Testing with R 
This is i F:/Testing with R/ABC_Data 
This is ROOT F:/Testing with R 

, 내가 폴더를 루프를 좋아하고 ABC_Data 작업 디렉토리 만들 것이라고 그래서 그런 다음 파일을 반복 할 수 있지만 좋아하지는 않습니다. 당신이 할 수있는, 그래서

> for (i in list.files("./")){ 
+ if (endsWith(tolower(i),"zip")){ 
+  unzip(i) 
+  cat("Unzipped",i,"\n") 
+ } 
+ } 
Unzipped GVA_BillData.zip 
> 
> for (i in list.dirs(getwd())){ 
+  cat("This is i",i,"\n") 
+  Root <- paste0(path.expand(i),"/") 
+  cat("This is ROOT",Root,"\n") 
+ 
+ } 
This is i F:/Testing with R 
This is ROOT F:/Testing with R/ 
This is i F:/Testing with R/ABC_Data 
This is ROOT F:/Testing with R/ABC_Data/ 
> 
> print(Root) 
[1] "F:/Testing with R/ABC_Data/" 
> 
> File_count <- 0 
> for (a in list.files(Root)){ 
+ print(a) 
+ if (endsWith(tolower(a),"csv")){ 
+  if (length(grep("service file",tolower(a)) > 0)){ 
+  Import <- read.csv(a, header = TRUE) 
+  for (i in 1:nrow(Import)){ 
+   Import_Date <- Import[1,4] 
+   if (File_count == 0){ 
+   write.table(c(Import[i,],Import_Date,a),"Output.csv",append = TRUE,sep = ",",row.names = FALSE,col.names = TRUE) 
+   File_count <- File_count + 1 
+   } else (write.table(c(Import[i,],Import_Date,a),"Output.csv",append = TRUE,sep = ",",row.names = FALSE,col.names = FALSE)) 
+   } 
+   } 
+  } 
+ } 
[1] "1234_126311.csv" 
[1] "Service File.csv" 
Error in file(file, "rt") : cannot open the connection 
In addition: Warning message: 
In file(file, "rt") : 
    cannot open file 'Service File.csv': No such file or directory 
> print("Finished") 
[1] "Finished" 

: 다음 특정 시점까지 일을 아래에 paste0()를 사용하여 개정 된 유래에 일부 페이지를 거쳐 시도했지만 두 번째 코드는 오류를 준

두 번째 코드에서 볼 수 있듯이 폴더로 점프하지만 오류 메시지가 throw됩니다. 나는 단순히 path.expand(i)을 사용해 보았지만 그게 효과가 없었다.

답변

2

setwd()을 사용할 때 할당 문제가 원인이라고 생각합니다. 첫 번째 코드를 다음과 같이 조정하면

for (i in list.dirs(getwd())){ 
    cat("This is i",i,"\n") 
    setwd(i) 
    Root <- getwd() 
    cat("This is ROOT",Root,"\n")  
} 

이 나에게 적합합니다.

문제는 setwd()이 작동하지 않는 것이 아니라 할당이 이전 작업 디렉토리를 반환한다는 것입니다. 문서 (?setwd)는 "setwd가 변경되기 전에 현재 디렉토리를 반환합니다"라고 말합니다. (Thanks @ Tensibai.) 다음 예제를 참조하십시오.

setwd("c:/") 
getwd() 
# [1] "c:/" 
z<-setwd("c:/Users/") 
z 
# [1] "c:/" 
getwd() 
# [1] "c:/Users" 
+0

감사합니다. 내가 처음부터 그렇게하지 못하게 한 이유는 무엇입니까? 함수를 호출하여 값을 할당했기 때문에 그랬습니까 ?? – AmarKahlon