You could build a function with the script you already made and then apply it to a vector containing the directories where the files are located. Inside the function, the names of the files that are going to be used can be searched as the files that match certain pattern using list.files
. Finally, you just have to save the ggplot in the correct directory and name the file with the name of the station. Here is your code with the modifications I made. I commented all the parts where I did not made changes to make it easier to follow. Hope it works!
#Added two libraries
library(stringr)
library(ggplot2)
my_function<-function(dirs)
{
#apply the same function for all the entries in the dirs vector
sapply(dirs, function(workd){
#Locate the file inside each directory that has "CNRM" and is a txt file
CNRM_location<-list.files(path = workd,
pattern = glob2rx("*CNRM*4.5*.txt"),
full.names = T)
#read that file
REF_CNRM <- read.table(CNRM_location, header=TRUE,dec=".",sep=" ", encoding="UTF-8")
# summary(REF_CNRM)
#
# colnames(REF_CNRM)[1] <-"date"
# colnames(REF_CNRM)[4] <-"Tasmin"
# colnames(REF_CNRM)[5] <-"Tasmax"
# colnames(REF_CNRM)[6] <-"Pre"
# colnames(REF_CNRM)[7] <-"Neige"
#
#
# REF_CNRM$date <- as.Date(as.character(REF_CNRM$date), format = "%Y%m%d")
# REF_CNRM$year <- year(ymd(REF_CNRM$date))
# REF_CNRM$month <- month(ymd(REF_CNRM$date))
# REF_CNRM$day <- day(ymd(REF_CNRM$date))
# REF_CNRM<- REF_CNRM[,c(8,9,10,1,2,3,4,5,6,7)]
# REF_CNRM <- REF_CNRM[,-4]
#
# REF_CNRM = subset(REF_CNRM,REF_CNRM$year>1970)
# REF_CNRM = subset(REF_CNRM,REF_CNRM$year<2006)
# REF_CNRM = subset(REF_CNRM,REF_CNRM$month>3)
# REF_CNRM = subset(REF_CNRM,REF_CNRM$month<10)
# summary(REF_CNRM)
# #convert to celecius
#
# REF_CNRM$Tasmoy = (REF_CNRM$Tasmin+REF_CNRM$Tasmax)/2
# Tasmoy <- convert.temperature(from="K", to="C",REF_CNRM$Tasmoy)
# REF_CNRM <- cbind(REF_CNRM,Tasmoy)
# REF_CNRM <- REF_CNRM[,-10]
# CNRM = aggregate(REF_CNRM[,10],FUN=mean,by=list(REF_CNRM$year))
#
# #precipitation moyenne annuelle
#
# CNRM_Pre = aggregate(REF_CNRM[,8],FUN=mean,by=list(REF_CNRM$year))
# DAta IPSL
#Locate the file inside each directory that has "IPSL" and is a txt file
IPSL_location<-list.files(path = workd,
pattern = glob2rx("*IPSL*4.5*.txt"),
full.names = T)
#read that file
REF_IPSL <- read.table(IPSL_location,header=TRUE,dec=".",sep=" ")
# summary(REF_IPSL)
#
# colnames(REF_IPSL)[1] <-"date"
# colnames(REF_IPSL)[4] <-"Tasmin"
# colnames(REF_IPSL)[5] <-"Tasmax"
# colnames(REF_IPSL)[6] <-"Pre"
# #colnames(REF_IPSL)[7] <-"Neige"
#
# #Date
# REF_IPSL$date <- as.Date(as.character(REF_IPSL$date), format = "%Y%m%d")
# REF_IPSL$year <- year(ymd(REF_IPSL$date))
# REF_IPSL$month <- month(ymd(REF_IPSL$date))
# REF_IPSL$day <- day(ymd(REF_IPSL$date))
# REF_IPSL<- REF_IPSL[,c(7,8,9,1,2,3,4,5,6)]
# REF_IPSL <- REF_IPSL[,-4]
#
# REF_IPSL = subset(REF_IPSL,REF_IPSL$year>1970)
# REF_IPSL = subset(REF_IPSL,REF_IPSL$year<2006)
# REF_IPSL = subset(REF_IPSL,REF_IPSL$month>3)
# REF_IPSL= subset(REF_IPSL,REF_IPSL$month<10)
# summary(REF_IPSL)
# #convert to celecius
# REF_IPSL$Tasmoy=(REF_IPSL$Tasmin+REF_IPSL$Tasmax)/2
# Tasmoy <- convert.temperature(from="K", to="C",REF_IPSL$Tasmoy)
# REF_IPSL <- cbind(REF_IPSL,Tasmoy)
# REF_IPSL <- REF_CNRM[,-9]
# IPSL = aggregate(REF_IPSL[,9],FUN=mean,by=list(REF_IPSL$year))
#
# #precipitation moyenne annuelle IPSL
# IPSL_Pre = aggregate(REF_IPSL[,8],FUN=mean,by=list(REF_IPSL$year))
# Données d'observations Laval
#Locate the file inside each directory that is a csv
Station_location<-list.files(path = workd,
pattern = glob2rx("*.csv"),
full.names = T)
#Read the file
obs <- read.table(Station_location,header=TRUE,sep=";",dec=",", skip=3)
#This is for extracting the name of the station, so you can save the plot with
#that name
Station_name<-list.files(path = workd,
pattern = glob2rx("*.csv"),
full.names = F)
#Remove the ".csv" part and stay only with the Station name
Station_name <- strsplit(Station_name,".csv")[[1]][1]
# summary(obs)
# colnames(obs)[2] <-"an"
# colnames(obs)[3] <-"mois"
# colnames(obs)[5] <-"Tasmax"
# colnames(obs)[6] <-"Tasmin"
# colnames(obs)[7] <-"Tasmoy"
# colnames(obs)[8] <-"Pre"
# summary(obs)
# obs = subset(obs,obs$an>1970)
# obs = subset(obs,obs$an<2006)
# obs = subset(obs,obs$mois>3)
# obs = subset(obs,obs$mois<11)
# summary(obs)
# OBS = aggregate(obs[,7],FUN=mean,by=list(obs$an))
#
# #precipitation mean IPSL
#
# obs_Pre = aggregate(obs[,8],FUN=mean,by=list(obs$an))
#
#
# #merge temperature
#
# CNRM_IPSL = merge(CNRM,IPSL, by="Group.1")
# CNRM_IPSL_obs=merge(CNRM_IPSL,OBS, by ="Group.1")
# colnames(CNRM_IPSL_obs)[1] <-"an"
# colnames(CNRM_IPSL_obs)[2] <-"CNRM"
# colnames(CNRM_IPSL_obs)[3] <-"IPSL"
#Paste the station name with "OBS_" to rename the column 4
colnames(CNRM_IPSL_obs)[4] <- paste0("OBS_",Station_name)
# CNRMIPSL <- reshape2::melt(CNRM_IPSL_obs, id.var='an')
# library(ggplot2)
# laval <- ggplot(CNRMIPSL, aes(x=an, y=value, col=variable)) + geom_line()+xlab('Années') +
# ylab('Température Moyenne (°C)')
# laval + scale_x_continuous(name="Années", limits=c(1988, 2006)) +
# scale_y_continuous(name="Température Moyenne (°C)", limits=c(12.5, 17))
#Finally save the plot to the directory using the station name
ggsave(paste0(workd,"/",Station_name,"_CNRM_IPSL.png"), width = 11, height = 8)
})
}
#Set the directories where you want to apply your function
station_directories<-c("C:/Users/majd/Documents/laval",
"C:/Users/majd/Documents/Paris",
"C:/Users/majd/Documents/Toulouse")
#Apply your function
my_function(station_directories)