行列と、ベクトルを受け取って行列を返す関数があります。この関数を行列のすべての行に適用し、すべての結果を結合します。たとえば、
mat <- matrix(1:6, ncol=2)
f <- function (x) cbind(1:sum(x), sum(x):1)
do.call(rbind, apply(mat, 1, f))
返される行列の行数が異なるため、apply はリストを返すため、これは完璧に機能します。ただし、行数が同じ場合は、これは機能しなくなります。
mat <- f(3)
apply(mat, 1, f)
apply は、必要な結果を取得できない行列を返します。apply にリストを返すように強制することは可能ですか、それとも別の解決策がありますか?
ベストアンサー1
これが私がこのパッケージを気に入っている理由です。このパッケージには、すべて同じように動作する関数がplyr
多数あります。最初の文字は入力として持っているものに対応し、2 番目のメソッドは出力として持っているもの (リスト用、配列用、データ フレーム用) に対応します。--ply
l
a
d
したがって、alply()
関数は と同様に動作しますapply()
が、常にリストを返します。
alply(mat, 1, f)