2017-11-18 24 views
0

私は関数tot_prof(number, df1, number, df2)を持っています。出力はそれ自身別のdfです。forループの各反復で新しいdfを作成する

tot_prof関数の値がstringになるように、私はdf3を反復しようとしています。

各反復では、新しいdfとしてtot_profの結果を格納する必要があります(またはすべての結果を組み合わせることができます)。

どうすればいいですか?

私はそうのような別の関数を作成しようとした:

iterator <- function(df, cluster, prod_dat, q_dat) { 

    l <- list(length(df)) 

    iter <- 1 

    for (i in l){ 
    thisl <- i 

    for (n in 1:nrow(df)) { 
     prod <- n 

     iter_out <- tot_prof(cluster, prod_dat, prod, q_dat) 

     l[[iter]] <- data.frame(iter_out) 
    } 
    iter <- iter + 1 
    } 

    l <- as.data.frame(l) 

    return(l) 
} 

それは10個の異なるprod値に対して310回の観察結果を返すべきである - その代わりに、同じprodの61回の観測を返します。

私は非常に混乱しています。助けてください。 (私は許可されていないのです)が、コメントではないため

+0

最後に 'l 'を付けるとどうなりますか?あなたは本当に何も返されていないようです。 – Elin

+0

@Elin私の編集内容をご覧ください。あなたが正しいと思っていましたが、それでも問題は解決していません。 – zsad512

+0

なぜあなたはそれをデータフレームにしていますか?それがリストとして正しく返されるかどうかを見ることから始めます。その後、リストをデータフレームにする作業を行います。 – Elin

答えて

1

申し訳ありませんが、多分ここに解決策:あなたが最後の1以上の新しいデータフレームを保存している各prodに対して

。解決策は、すべてのprodデータフレームを列(cbind())または行(rbind())で組み合わせることです。最後にリストlに保存してください。

iterator <- function(df, cluster, prod_dat, q_dat) { 

    l <- list(length(df)) 

    for (i in l){ 
     iter <- i 

     for (n in 1:nrow(df)) { 
     prod <- n 

     df <- tot_prof(cluster, prod_dat, prod, q_dat) 

     if(prod == 1) { 
      iter_out <- df 
     }else { 
      iter_out <- cbind(iter_out, df) # or rbind depending what you want 

     }   
     } 
     l[[iter]] <- iter_out 

     iter <- iter + 1 
    } 

    return(l) 
    } 
関連する問題