У меня есть zip-файл, который я распаковываю, тогда я использую цикл for, чтобы пройти через каталоги в рабочем каталоге, а затем сменить рабочий каталог на новую папку, которую я только что распаковал , Однако, похоже, это не нравится.Рабочие каталоги в R, использующие для цикла
Ниже приведены два кода, которые я использовал, один из них заканчивается ошибкой, а второй - тем, что я не хочу делать. Я думаю, что я, возможно, смешиваю некоторую логику Python?
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 рабочий каталог, так что я может затем перебирать файлы, но ему это не нравится.
Второй код, который я попробовал, пройдя через несколько страниц Stackoverflow были внесены изменения с использованием paste0() до уровня ниже, который работал до определенного момента, но затем дал ошибку:
> 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"
Итак, как вы можете см. во втором коде, он перескакивает в папку, но выдает сообщение об ошибке. Я попытался использовать просто path.expand(i)
, но это не сработало.
Спасибо, бутон, это сработало и для меня. Любая причина, по которой это не позволяло мне сделать это в первую очередь? Я имею в виду, потому что я назначал значение, вызывая функцию? – AmarKahlon