我使用alphahull包来查看物种区域分布。我的最终目标是保存183个不同的散点图,每个散点图由相同的x变量,alpha(1-25)和唯一的y变量alphaarea组成。我已经用内循环完成了这个,但外循环需要一些工作。内环为alpha 1-25的值找到alphaarea。外部循环应该对每个物种重复这一点,并为每个物种创建一个散点图,保存到jpeg文件中。变量alphaarea应该有183个不同的集合,每个集合有25个值。
alphaarea = numeric(0)
for (s in 1:183) { #outer loop
results = numeric(0)
for (i in 1:25) { #inner loop
Ai_ahull<-ahull((coordinates(subset(data, data$Species==s))), alpha=i)
results[i] = areaahull(Ai_ahull)
}
alphaarea[s]<-results[1:25]
alphaval<-c(1:25)
jpeg(file = "C:/Users/Lab user/My Documents/...Graph1.jpeg")
plot(alphaval, alphaarea)
paste("Graph_", s, ".jpg", sep="")
}
我得到的错误是alphaarea [1]只对应1个值。每个后续s的alphaarea不存在。目标是让每个alphaarea的长度为25,并且其中有183个。如果有人对如何执行此操作或在我的代码中发现错误,请告诉我。谢谢!
答案 0 :(得分:0)
您的代码中有两个地方,您似乎正在尝试创建一个用于存储分析结果的向量。你使它们成为向量的方式只有长度为1。
alphaarea = numeric(0)
results = numeric(0)
如果你打电话给length(alphaarea)
,你可以看到它的长度为1.因此,每当你的循环完成它的事情时,它会覆盖前一个条目。
试试这个
alphaarea = rep(NA,25)
产生一个长度为25的“NA”值的向量。第一次循环你的代码结果将保存在第一个插槽中,第二次循环它将存储在第二个插槽中,等等
此外,您的代码
alphaarea[s]<-results[1:25]
没有意义。看起来你想要alphaarea是125 x 25矩阵。尝试制作一个空矩阵来保存您的数据:
alphaarea <- matrix(data = NA, nrow = 183, ncol = 25,
byrow = FALSE)
然后检查输出以确保它看起来像。
head(alphaarea)
dim(alphaarea)
检查循环是否正常运行的一种方便方法是调用browser()
,这将使您进入R的调试模式。然后,您必须为每段代码按Enter键。然后,您还可以使用数据对象上的head,dim,length,summary等命令查看循环在每个阶段产生的内容,例如head(alaphaarea)。或者只是在alphaarea中查看对象的样子。
最后你的jpeg保存代码似乎已关闭。您需要生成不同的文件名,我假设您尝试使用粘贴。您可能应该做的是首先构建一个名称并将其分配给一个对象,您几乎可以编写该对象
jpeg_name <- paste("Graph_", s, ".jpg", sep="")
然后在你对jpeg()的调用中使用file = jpeg_name
。您也可以使用paste()来添加文件名的路径,否则它只会保存到您所在的工作目录中。您可以使用getwd()
检查您的工作目录。
jpeg(file =“C:/ Users / Lab user / My Documents / ... Graph1.jpeg”)