Как построить несколько графиков вариограммы с разными названиями, используя функцию loop/lapply?
У меня есть CSV-файл содержит почасовую концентрацию PM10 от 1 марта до 7 марта. Пожалуйста, загрузите отсюда. Я построил всю вариограмму (всего 161) в цикле с помощью пакета automap.
library(sp)
library(gstat)
library(rgdal)
library(automap)
library(latticeExtra)
seoul1to7<-read.csv("seoul1to7.csv")
seoul1to7[seoul1to7==0] <-NA
seoul1to7 <- na.omit(seoul1to7)
seoul1to7_split<-split(seoul1to7,seoul1to7$time)
seq(seoul1to7_split)
vars<-lapply(seq(seoul1to7_split), function(i)
{
dat<-seoul1to7_split[[i]]
coordinates(dat)<-~LON+LAT
proj4string(dat) <- "+proj=longlat +datum=WGS84"
dat <- spTransform(dat, CRS("+proj=utm +north +zone=52 +datum=WGS84"))
variogram<-autofitVariogram(log(PM10)~1,dat, model="Sph")
plot<- plot(variogram,plotit=FALSE, asp=1)
return(plot)
})
vars[[1]]
vars[[2]]
Здесь я могу получить индивидуальный сюжет vars[[1]],vars[[2]]...
и т.д., но все вариограммы имеют одинаковое название. Теперь я хочу построить все вариограммы с разными названиями в цикле. Я хочу, чтобы название моей вариограммы было таким, как "Вариограмма для 2012-03-01 1.00", "Вариограмма для 2012-03-01 2.00" ..... и т.д.
a<-as.POSIXct(names(seoul1to7_split), format="%Y%m%d%H")
a
hours<-substr(a,1,16)
hours
Я держу желаемый другой титул в hours
переменная типа "2012-03-01 01:00", "2012-03-01 02:00", "2012-03-01 03:00" ... и т. д.
Как я могу построить все вариограммы (всего 161) с другим названием, используя цикл?
1 ответ
Хитрость заключается в использовании png
а также dev.off
:
library(automap)
data(meuse)
coordinates(meuse) = ~x+y
fit_for_model_type = function(model_type) {
return(autofitVariogram(log(zinc) ~ dist, meuse, model = model_type))
}
model_options = c("Sph", "Exp", "Gau", "Ste")
list_of_variogram_models = lapply(model_options, fit_for_model_type)
names(list_of_variogram_models) = model_options
lapply(names(list_of_variogram_models), function(x) {
png(filename = sprintf('%s.png', x))
print(plot(list_of_variogram_models[[x]]))
dev.off()
})