我正在尝试使用几个for循环条件生成几个R图(" vegan"包的输出)以对我的数据集进行子集化。 如果我只使用一个条件,我将检索我想要的图,但如果我链接for循环,它将不会创建预期条件的数量。
我的数据框类似于:
my_df<- data.frame(Cruise = sample(c("cruise2016" ,"cruise2008" ,"cruise2012" ,"cruise2014" ,"cruise2011"), 50, replace=T),
Depth_interval = sample(c("100","200","500"), 50, replace = T),
data.frame(matrix(sample(1:100,300,replace=T), nrow=50)))
我使用两个列表作为循环的条件:
cruise.list <- unique(my_df$Cruise)
interval.list <- unique(my_df$Depth_interval)
通过这些列表,我想在每次巡航中绘制所有深度间隔(3个唯一身份)(5个唯一身份)
for (i in seq_along(cruise.list)) {
for (i in seq_along(interval.list)) {
pdf(paste("my_path",
cruise.list[i],
interval.list[i],
".pdf", sep=""))
df <- my_df %>%
filter(
Cruise == cruise.list[i],
Depth_interval == interval.list[i])
df.nmds <- metaMDS(df, trymax = 1000, k = 3, distance = "bray")
# Plot
ordiplot(df.nmds, disp="sites", type="p", cex.lab=1.3)
title(main=paste(cruise.list[i], "\n", interval.list[i],"\n", "stress : ", round(df.nmds$stress,2),sep=""), cex.main=1.5)
dev.off()
}
}
使用此代码,我只获得3个图而不是预期的15个图。我想for循环的顺序是R不像我期望的那样读取条件。
感谢您的帮助,
贝斯茨
答案 0 :(得分:0)
您使用了相同的&#34;循环变量&#34;在两个循环中。 For循环的工作方式是将序列的当前值分配给您指定的变量,因此在嵌套循环中,首先将当前巡航分配给i
,然后在紧接之后,i
被覆盖。当前间隔,您无法再访问当前巡航,例如:
cruise_list = c("Princess", "White Star")
interval_list = c("Summer", "winter")
for (i in cruise_list) {
print(paste("Outer loop: i =", i))
for (i in interval_list) {
print(paste("Inner loop: i =", i))
}
}
[1] "Outer loop: i = Princess"
[1] "Inner loop: i = Summer"
[1] "Inner loop: i = winter"
[1] "Outer loop: i = White Star"
[1] "Inner loop: i = Summer"
[1] "Inner loop: i = winter"
另请注意,您可以直接在cruise_list
之类的向量上进行迭代,而不必经过seq_along
并生成索引,直接执行此操作可能会帮助您注意到问题越快。