I developed a script to do operations and graphics on temperature and precipitation files and forecasts. I have 3 stations on which I will have to do the same steps, here is a part of the script that changes the name of the station in the text file name and CSV my question is how to run the script on the 3 folders and save each number for each station at the same time
That the script:
I have 3 folders C: /Users/majd/Documents/l C: /Users/majd/Documents/P C: /Users/majd/Documents/V
In the 3 folders I have the 3 files:
For station 3 the sames files
How I can run the script for the 3 folders in the same times and save the figure using ggplot for the 3 stations in the same time
library(ggplot2)
laval <- ggplot(CIP, aes(x=an, y=value, col=variable)) + geom_line()+xlab('Années') +
laval + scale_x_continuous(name="Années", limits=c(1988, 2006)) +
scale_y_continuous(name="", limits=c(12.5, 17))
ggsave("L.png", width = 11, height = 8)
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)