次の問題について何時間も考えます。シミュレーション スタディを実行していますが、コードの最後でこれらの関数を呼び出せるようにするために、シミュレーション スタディの外部で関数を定義したいと考えています。
この例は問題を示していますが、再現できません (問題の再現可能な例を以下に示します)。メタ分析を行うために「metafor」パッケージを利用しています。
最終的なシミュレーション コードの外で定義する次の関数を使用したいと思います。
mat <- matrix(NA, nrow = 8, ncol = 3)
funtr.stu <- function(i) {
for (y in 1:8) {
mat[y,i] <- tr[[y]]$k0
}
return(mat)
}
"tr" はリストで、8回の分析結果で構成されています。そのリストからオブジェクト「k0」を取得し、マトリックス「mat」に格納します。
コードの次の部分 (シミュレーションを実行する部分) では、関数を呼び出して、行列 "mat" に正しい数値を入力します。
for (i in 1:iterations) {
tr.stu <- funtr.stu()
}
このコードの結果は塗りつぶされた行列ですが、各列内の数値は同じです。したがって、R は反復ごとに数値を格納するのではなく、最後の反復のみを格納します。
R が必要に応じて出力を保存するようにコードを変更するにはどうすればよいですか?
非常に単純化された例:
Mat は数値を含む行列を表し、 res は入力したい空の行列です。
mat <- matrix(data = c(1,2,3,4,5,6), ncol = 2, nrow = 3)
res <- matrix(NA, ncol = 2, nrow = 3)
関数「fun」を使用して、空行列 res を埋めます。
fun <- function() {
for (i in 1:2) {
res[y,i] <- mat[y,i]
}
return(res)
}
これは、コードの最後に入れたいものです(関数を呼び出したいだけで、この関数で行列「res」を埋めたいです)。ただし、以下のコードを使用すると、R は 1 行目と 2 行目ではなく 3 行目のみを埋めます。
for (y in 1:3) {
test <- fun()
}
前もって感謝します!