双循环定义变量

时间:2014-12-11 18:33:26

标签: for-loop

我使用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个。如果有人对如何执行此操作或在我的代码中发现错误,请告诉我。谢谢!

1 个答案:

答案 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”)

相关问题