Как восстановить исходный каталог файлов после цикла?

#r

#r

Вопрос:

Я новичок в языке R. В настоящее время работает над функцией, которая требует сначала установить каталог. Допустим, мой исходный каталог «C:/Users/DS/Desktop/LLLRRR/coursera/Coursera «. После функции («specdata», …) он установит каталог в «C:/Users/DS/Desktop/LLLRRR/coursera/Coursera/specdata «. Есть ли какой-либо способ восстановить исходный каталог в конце цикла?

Моим текущим решением является добавление setwd(«C:/Users/DS/Desktop/LLLRRR/coursera/Coursera «) в конце цикла.

 pollutantmean <- function(directory,pollutant,id=1:332){
    path<-paste(getwd(),directory,sep="/")
    setwd(path)
    data<-data.frame()
    if(id<10){
      readfile<-paste("00",id,".csv",sep="")
      dt<-read.csv(readfile)
      data<-rbind(data,dt)
    }else if(id>9amp;id<100){
      readfile<-paste("0",id,".csv",sep="")
      dt<-read.csv(readfile)
      data<-rbind(data,dt)
    }else{
      readfile<-paste(id,".csv",sep="")
      dt<-read.csv(readfile)
      data<-rbind(data,dt)
    }
    return(mean(data[,pollutant], na.rm = T))
}
pollutantmean("specdata", "nitrate", 23)
 

«»»

 pollutantmean("specdata", "nitrate", 23)
[1] 1.280833

getwd()
[1] "C:/Users/DS/Desktop/LLLRRR/coursera/Coursera/specdata"
 

Он остается новым каталогом
Есть ли лучший способ восстановить исходный каталог?
«»»

Ответ №1:

Мы можем присвоить исходному каталогу идентификатор, прежде чем установить его в качестве текущего каталога, и в конце вернуть list

 pollutantmean <- function(directory,pollutant,id=1:332){
    origdir <- getwd() # modified
    path<-paste(origdir,directory,sep="/")
    setwd(path)
    data<-data.frame()
    if(id<10){
      readfile<-paste("00",id,".csv",sep="")
      dt<-read.csv(readfile)
      data<-rbind(data,dt)
    }else if(id>9amp;id<100){
      readfile<-paste("0",id,".csv",sep="")
      dt<-read.csv(readfile)
      data<-rbind(data,dt)
    }else{
      readfile<-paste(id,".csv",sep="")
      dt<-read.csv(readfile)
      data<-rbind(data,dt)
    }

    list(Mean = mean(data[,pollutant], na.rm = TRUE), Dir = origdir) # modified
}
pollutantmean("specdata", "nitrate", 23)
 

Комментарии:

1. Отлично! Спасибо за это!