我想使用R包eHOF运行一个(~100)个eHOF模型,生成这个包可以制作模型的图形,并保存每个模型的jpeg文件。我试图使用for循环来快速完成这个,但我无法让它来制作图表。我在R studio plot窗口中看不到任何内容,我生成的jpeg文件中没有任何内容(作为旁白问题,我没有在循环中正确生成jpeg文件的名称)。
要生成这些图,在循环外没有问题,例如我调用我的模型modSP< -HOF(Sp,...)然后使用plot(ModSp)生成所需的图形。但是在循环中,什么都没有产生,我得到了几个类似的错误消息:
1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
2: In plot.window(...) : "boxp" is not a graphical parameter
3: In plot.window(...) : "las.h" is not a graphical parameter
4: In plot.window(...) : "onlybest" is not a graphical parameter
5: In plot.window(...) : "para" is not a graphical parameter
背景:我在R studio中使用R版本3.1.0(2014-04-10),并在Windows 7中使用eHOF。
我的代码如下:
species<- read.csv("F:/Thesis_projects/Chapter4_climateChange/HOF/259species.csv")
species<-as.data.frame(species)
enviro<-read.csv("F:/Thesis_projects/Chapter4_climateChange/HOF/EnvironmentalData.csv")
enviro<-as.data.frame(enviro)
species_enviro<-merge(enviro, species, all.x=FALSE)
HOF_Sp<-species_enviro[,23:25]
GDD<-species_enviro[,19]
library(eHOF)
SpeciesCodes<-c("ACPE","ACRU2","ACSP2")
Modx<-NULL
for (Spp in seq_along(SpeciesCodes)){
Modx[[Spp]]<-HOF(HOF_Sp[[Spp]],GDD, M=1,family=binomial, bootstrap=2, freq.limit = 100)
jpeg(filename = (paste(("GDD_responsecurve_",SpeciesCodes[[Spp]],".jpg"),sep="")),
width =8.3, height = 8.3, units = "cm", pointsize = 8, bg="white", res = 800)
print(plot((paste(c(Modx[[Spp]]))), boxp = TRUE,
las.h = 1, onlybest = TRUE, para = TRUE,
gam.se = FALSE, newdata = NULL, lwd=1, leg = TRUE, add=FALSE,
xlabel="Growing degree days", ylab="Probability"))
dev.off()
}
我的数据如下:
> head(GDD)
[1] 996.1681 996.1681 962.0662 962.0662 945.7007 945.7007
(物种数据中也有很多1,而不是前几行)。
> head(HOF_Sp)
ACMI2 ACPA ACPE
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
任何建议都将非常感谢!我认为循环中的情节函数被误认为R的通用情节函数是一个问题。如果我没有提供足够的信息,我将很乐意编辑我的问题。
答案 0 :(得分:0)
这里有几件事情发生了:
SpeciesCodes
向量的代码与HOF_Sp
中的列名不同。seq_along(...)
返回其参数中每个元素的索引,而不是元素本身。plot
类的对象传递给HOF
时,会调用HOF
的{{1}}方法。但是你传递的是plot(...)
,这是不可理解的...... paste(c(HOF))
的样本是简并的,因为没有非零值。由于上面的(4),我不可能测试这段代码,但试试这个:
HOF_Sp
请注意,这会调用SpeciesCodes <- c("ACPE","ACRU2","ACSP2")
for (Spp in SpeciesCodes) {
model <- HOF(HOF_Sp[[Spp]],GDD, M=1,family=binomial, bootstrap=2, freq.limit = 100)
jpeg(filename = (paste(("GDD_responsecurve_",Spp,".jpg"),sep="")),
width =8.3, height = 8.3, units = "cm", pointsize = 8, bg="white", res = 800)
plot(model, boxp = TRUE,
las.h = 1, onlybest = TRUE, para = TRUE,
gam.se = FALSE, newdata = NULL, lwd=1, leg = TRUE, add=FALSE,
xlabel="Growing degree days", ylab="Probability")
dev.off()
}
的矢量版本,我收集的是你想要的。
这不能解决上面(1)中的问题(物种代码与列名称不匹配),但除此之外它应该有效。