2017-01-31 15 views
1

私は単純なループを作成して、シミュレートされたデータの効率を計算しました。これは、ループとしてながら、完璧に実行されます。関数内forループの出力が正しくありません

NSE_cal <- NULL 

for(i in 1:6) { 
Qobs <- flowSummary_NSE1[[i]][[3]] 
Qsim <- flowSummary_NSE1[[i]][[1]] 
object_cal <- NSEsums("NSE") 
NSE_cal <- c(NSE_cal, object_cal) 
} 

#NSE_cal 
#[1] 0.8466699 0.7577019 0.8128499 0.9163561 0.7868013 0.8462228 

はしかし、私はこのループにかなりの数回を適用したい - 私はオブジェクトflowSummary_NSE#を変更する必要があると私は適用するために4つの異なる変換タイプを持っています。スタートとして、私は唯一のtransformation、指定されたので、同様にすることが必要で、関数の内部ループを置く:

badFunction <- function(transformation){ 

NSE_cal <- NULL 

for(i in 1:6) { 
    Qobs <- flowSummary_NSE1[[i]][[3]] 
    Qsim <- flowSummary_NSE1[[i]][[1]] 
    object_cal <- NSEsums(transformation) 
    NSE_cal <- c(NSE_cal, object_cal) 
} 
    print(NSE_cal) 
} 

badFunction("NSE") 
# [1] 0.8462228 0.8462228 0.8462228 0.8462228 0.8462228 0.8462228 

機能と全く同じ情報の入力を持っているため、除いて自分自身でループ、用何らかの理由で、それぞれの場合に同じ値をiとして出力します。

私は間違ったことをしています。しかし、私が見る限り、それは関数自体に単純なものでなければなりません。しかし、それは他の場所でエラーで包み、私は必要なデータや依存の関数を生成するコード(here

を添付しているすべてのヘルプは非常にあなたが引数としてネストされた関数にオブジェクトを渡す必要が

答えて

1

をいただければ幸いです。あなたのfunction_NSEsums.rスクリプトで

次にあなたのコードを変更し、あなたのexample_script.rでNSEsums <- function(i, Qobs, Qsim) {

に最初の行を変更します。

badFunction <- function(transformation){ 

    NSE_cal <- NULL 

    for(i in 1:6) { 
    Qobs <- flowSummary_NSE1[[i]][[3]] 
    Qsim <- flowSummary_NSE1[[i]][[1]] 
    object_cal <- NSEsums(transformation, Qobs = Qobs, Qsim = Qsim) 
    NSE_cal <- c(NSE_cal, object_cal) 
    } 

    print(NSE_cal) 

} 

badFunction("NSE") 

[1] 0.8466699 0.7577019 0.8128499 0.9163561 0.7868013 0.8462228 
+1

は依存材料に見て時間を割いていただき、ありがとうございます;私はすでにすべての部分を通過したと確信していた。ソリューションは今明らかであるようです!関数のforループが機能していない次回の試行のためにそれを私のリストに追加します – Visser

+1

あなたの大歓迎です。ちょうどFYIあなたの悪い機能は、それを実行する前に地球環境をクリアした場合、0.846 ..を6回出力しません。 QobsとQsimをそこから引っ張って、毎回同じ値にしていました。 –

+1

これは完璧な意味合いがあります!私はいつも出力が正しいことを確認できるように、前にプレーンループを走らせました。次回のトラブルシューティング時に試してみることのリストに追加します。あなたの優れたアドバイスをありがとう – Visser

関連する問題