我正在尝试通过更改循环中的每个参数并比较图表以确定哪些参数为我提供最佳基线来优化R基线包中baseline
的参数。
我目前已编写代码,以便循环生成每个图,但是由于将要创建的每个对象的类是特定于基线包的(我怀疑是问题),因此无法保存图这里)。
foo <- data.frame(Date=seq.Date(as.Date("1957-01-01"), by = "day",
length.out = ncol(milk$spectra)),
Visits=milk$spectra[1,],
Old_baseline_visits=milk$spectra[1,], row.names = NULL)
foo.t <- t(foo$Visits)
#the lines above were copied from https://stackoverflow.com/questions/37346967/r-packagebaseline-application-to-sample-dataset to make a reproducible dataset
df <- expand.grid(lambda=seq(1,10,1), p=seq(0.01,0.1,0.01))
baselinediff <- list()
for(i in 1:nrow(df)){
thislambda <- df[i,]$lambda
thisp <- df[i,]$p
thisplot <- baseline(foo.t, lambda=thislambda, p=thisp, maxit=20, method='als')
print(paste0("lambda = ", thislambda))
print(paste0("p = ", thisp))
print(paste0("index = ", i))
baselinediff[[i]] <- plot(thisplot)
jpeg(file = paste(baselinediff[[i]], '.jpeg', sep = ''))
dev.off()
}
我知道我可以使用baseline.als
提取校正后的光谱,但是我只想保存带有红色基线的绘图图像,以便可以看到基线的绘制情况。有baseline
位用户可以提供帮助吗?
答案 0 :(得分:1)
我建议您通过以下方式更改循环:
for(i in 1:nrow(df)){
thislambda <- df[i,]$lambda
thisp <- df[i,]$p
thisplot <- baseline(foo.t, lambda=thislambda, p=thisp, maxit=20, method='als')
print(paste0("lambda = ", thislambda))
print(paste0("p = ", thisp))
print(paste0("index = ", i))
baselinediff[[i]] <- thisplot
jpeg(file = paste('baseline', i, '.jpeg', sep = ''))
plot(baselinediff[[i]])
dev.off()
}
请注意,这不会尝试捕获列表内已绘制的元素(thisplot
)。而是在调用jpeg
命令之后完成绘制。这样可以解决您的出口问题。另一个问题是文件的命名。如果在baselinediff[[i]]
内调用paste
,显然会导致错误。因此,我将其切换为更简单的名称。要绘制结果列表,请致电:
lapply(baselinediff, plot)
如果确定要存储已绘制的 元素,则capture.plot
包中的imager
函数可能是一个不错的开始。