0

次の問題について何時間も考えます。シミュレーション スタディを実行していますが、コードの最後でこれらの関数を呼び出せるようにするために、シミュレーション スタディの外部で関数を定義したいと考えています。

この例は問題を示していますが、再現できません (問題の再現可能な例を以下に示します)。メタ分析を行うために「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()
}

前もって感謝します!

4

1 に答える 1

1

これはあなたの場合にうまくいくはずです。基本的に、for ループの各反復で 1 行を返します。「res」マトリックス全体を返す場合。

mat <- matrix(data = c(1,2,3,4,5,6), ncol = 2, nrow = 3)
res <- matrix(NA, ncol = 2, nrow = 3)


fun <- function() {
  for (i in 1:2) {
    res[y,i] <- mat[y,i]
  }
  return(res[y,])
}

for (y in 1:3) {
  test[y,] <- fun()
}
于 2013-04-02T09:50:07.097 に答える