強制的に適用してリストを返す 質問する

強制的に適用してリストを返す 質問する

行列と、ベクトルを受け取って行列を返す関数があります。この関数を行列のすべての行に適用し、すべての結果を結合します。たとえば、

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 番目のメソッドは出力として持っているもの (リスト用、配列用、データ フレーム用) に対応します。--plylad

したがって、alply()関数は と同様に動作しますapply()が、常にリストを返します。

alply(mat, 1, f)

おすすめ記事