1
apply()とsweep()を比較するメモを書き、次のような奇妙な違いを発見しました。同じ結果を生成するためには、sweep()にはMARGIN = 1が必要です。applyにはMARGIN = 2が必要です。また、行列を指定する引数はapply()では大文字ですが、sweep()では小文字です。apply()とsweep()in R
my.matrix <- matrix(seq(1,9,1), nrow=3)
row.sums <- rowSums(my.matrix)
apply.matrix <- apply(X = my.matrix, MARGIN = 2, FUN = function (x) x/row.sums)
sweep.matrix <- sweep(x = my.matrix, MARGIN = 1, STATS = rowSums(my.matrix), FUN="/")
apply.matrix - sweep.matrix ##yup same matrix
sweep()は「適用型」関数ではありませんか?これはちょうど別のRの奇妙なものか、私は私の心を失った?
は
あなたの質問は何ですか?具体的には、ドキュメントを読んだ後にはっきりしないものはありますか? – Roland
質問:2つの密接に関連した関数は、実際に同じ問題に対して異なる構文を持っていますか? –
Rは長年にわたって開発されており、Rコアは既存のコードを壊さないよう細心の注意を払っています。これらの機能はおそらくSの遺産であり、S/S-PLUSとの互換性は初期の大きな問題でした。 – Roland