2017-05-25 10 views
0

私はいくつかのforループ条件を使用して私のデータセットをサブセット化するいくつかのRプロット( "vegan"パッケージの出力)を生成しようとしています。 私は条件として1つしか使用しない場合、私は必要なプロットを取得しますが、forループを連鎖すると期待される条件の数は作成されません。R - 複数の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各クルーズ内のユニーク(ユニーク):

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() 

    } 

} 

このコードでは、15期待される。私は、forループは、Rが私が期待している条件を読まないような順序であると推測します。任意の助け

おかげで、

カテゴリーで探す

+3

両方のループでループ変数として 'i'を使用することはできません。常に内側ループの値をとります。 'i'と' j'を使うか、 'current_cruise'と' current_interval'を使う方が良いでしょう。 – Marius

+0

ありがとう、完璧に動作します!簡単な間違い、大きな問題! – Rhiz

答えて

0

あなたは両方のループに同じ「ループ変数」を使用していました。あなたが指定した変数にシーケンスの現在の値を代入することによってループを行うと、ネストされたループの中で、現在のクルーズは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" 

また、私はseq_alongを通過し、インデックスを生成することなく、上記のやったとしてそれはあなたを助けている可能性があるようにあなたが直接それをやって、cruise_listのようなベクトルの真上に繰り返すことに注意してください問題が早期にわかる。

+0

ソリューションをありがとう!うまく動作します! – Rhiz

関連する問題