web-dev-qa-db-ja.com

Rrbindデータフレームはリストを返します

私は問題に遭遇し、ハックでそれを解決することができました。問題を理解し、うまくいけばハックを取り除きたいと思います。

問題を再現しようとしても無駄だったので、ここでは言葉で十分です。

Rで2つのデータフレームをrbindしようとしていますその結果はリストではなくデータフレームである必要があります。私はほとんどのスクリプトでrbindを使用しており、これまで問題が発生したことはありません。

しかし、今日、私はrbindを2つのデータフレーム、たとえばfoobarに適用し、listfoobarを返しました。これを修正するために使用するハックは、次のようにfoobarをデータフレームに再度強制変換することです。

rbind(data.frame(foo), data.frame(bar))

これは機能しますが、foobarの両方がすでにdata.framesであるのになぜ明示的に変換する必要があるのか​​知りたいです。

私の質問は、両方の入力がdata.framesの場合、どの「一般的な」シナリオでrbindlistを返すかということです。

rbind(A,A)rbind(B,B)を見てデバッグしてみました。どちらの場合も、listではなくデータフレームを返します。では、なぜrbind(A,B)listを返すのでしょうか?

ありがとう!

7
gmarais

データフレームの1つが実際に tibble である場合は、dplyr::bind_rows()の代わりに rbind() を使用する必要があります。 dplyr::bind_rows()は、特にチブルを処理するように設計されています(一般にデータフレームでも機能します)。 tibblesはtidyverseの発明であるため、rbind()のような基本関数と必ずしも完全に互換性があるとは限りません(私自身、このような動作が発生することを、あなたが立ち上げるまで気づいていませんでした)。

2つの関数の違い、およびdplyr::bind_rows()ではなくrbind()を使用する理由の詳細については、 ここ を参照してください。

9
Phil