3

申し訳ありませんが、これはすでにここで回答されていることに気付きました。

これはかなり基本的なはずですが、なぜそれが起こっているのかよくわかりません。誰か助けてくれませんか?これは、「データ」の例を使用した単純なコードです。

applyDirichletPrior <- function (row_vector) {
  row_vector_added <- row_vector + min (row_vector)
  row_vector_result <- row_vector_added / sum(row_vector_added)
}
data <- matrix(c(1,2,3,4,5,6,7,8), nrow=2, ncol=4)
applied <- apply(data, 1, function(x) applyDirichletPrior(x))

出力は次のようになります。

> applied
     [,1]      [,2]
[1,]  0.1 0.1428571
[2,]  0.2 0.2142857
[3,]  0.3 0.2857143
[4,]  0.4 0.3571429

次のように、入力データと同じ形式の出力が期待されますが、

> applied
          [,1]      [,2]      [,3]      [,4]
[1,] 0.1000000 0.2000000 0.3000000 0.4000000
[2,] 0.1428571 0.2142857 0.2857143 0.3571429

なぜ、どの段階でapply転置が行われるのですか?

4

1 に答える 1

8

個々の適用ステップの結果の組み合わせは、いくぶん恣意的です。あなたの期待はどのような根拠で異なっていましたか?表示される動作は、ドキュメントで説明されている方法です。

'FUN' の各呼び出しが長さ 'n' のベクトルを返す場合、'n > 1' の場合、'apply' は次元 'c(n, dim(X)[MARGIN])' の配列を返します。

後で転置を簡単に実行できることに注意してください。

> t(applied)
          [,1]      [,2]      [,3]      [,4]
[1,] 0.1000000 0.2000000 0.3000000 0.4000000
[2,] 0.1428571 0.2142857 0.2857143 0.3571429
于 2013-08-19T11:20:13.217 に答える