私はこの関数をRで書こうとしていますが、エラーは継続しています。 1回のシミュレーション実行で、2つの異なる出力値を生成するために、2つのintevalsからランダムな値を生成します。関数ifelse計算
- se.m入力パラメータが範囲内にある場合は[0、1]
- se.st入力パラメータは[1,5]
(neglegibleにおける浮動小数点)wiothinにある場合
:その後、これらのランダムに生成された値は、次の関数に入力として使用されるfuchs08 <- function(n){
x.m=se.m=x.st=se.st=NULL
for(i in 1:n){
se.m[i] <- ifelse (runif(n = 1, min = 0, max = 1) < 0.33, 0, 0.12 * (x.m[i]^2) - 0.04 * x.m[i])
se.st[i] <- ifelse (runif(n = 1, min = 1, max = 5) < 3.06, 0.12 * (x.m[i]^2) - 0.04 * x.m[i], 1)
}
return(cbind(se.m, se.st))
}
私はどんな結果を得るいけない:
これは私が使用しているコードです。私はエラーがifelseステートメントにあると信じていますが、それに対する解決策を見つけることはできません。
> fuchs08(5)
se.m se.st
[1,] 0 NA
[2,] NA 1
[3,] NA 1
[4,] NA NA
[5,] 0 1
全体的なアイデアはfunktionen
と呼ばれる関数のリストにこの機能を追加することです。それから私は100回シミュレーションを実行します。シミュレーション1は、リストfunktionen
から関数をランダムに選択して実行します。 (ファンクションは前述のintevalsの2つの出力を作成します:se.m
とse.st
はシミュレーション2:99の出力と組み合わされています)したがって、関数はランダム関数の選択を実行するためにはfunction(n)
の形式である必要があります。その部分のコードは次のとおりです。
funktionen <- list(akbas, bell.glade, borter, fell.hartford, fuchs07, fuchs08)
fxn_list_sample <- sample(1:5, 100, replace=T)
fxn_list_result <- unlist(sapply(fxn_list_sample, function(x) do.call(funktionen[[x]], args=list(n=1))))
results <- as.data.frame(t(fxn_list_result))
colnames(results) <- c("se.m", "se.st")
results <- melt(results)
results$value <-round(results$value, 4)
separate(results, variable, into = c("Parameter", "Intensitaet")) %>%
mutate(Intensitaet = c(3, 2) [(Intensitaet == "m")+1])
これを修正する方法はありますか?
私は驚いていないよ - あなたの 'x.m'はもちろん、それは適切な値を得られませんアクセス、空です。ループ内で、なぜベクトル化されている 'ifelse'を使っているのかもよく分かりません。これは重複しているように感じますが、私は単にあなたの要件を誤解しているかもしれません。 –
@Konradご連絡ありがとうございます。確かに、私は自分自身をとてもうまく説明しているかどうかはわかりません。それで私はその質問を編集した。なぜ私はrebundantと思われるループを使用してあなたの質問に?私はリスト 'funktionen'に終わる他の関数(ここには示されていません)に同じ手順を使いました。私は基本的にそれ以上のことを知らなかった... – Danka