R - 用于生成和保存图的多个for循环

时间:2017-05-25 00:01:24

标签: r for-loop plot

我正在尝试使用几个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不像我期望的那样读取条件。

感谢您的帮助,

贝斯茨

1 个答案:

答案 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并生成索引,直接执行此操作可能会帮助您注意到问题越快。