9

新しいセッションを指定して、関数のドキュメントで提供されている小さなggparcoord(.)の例を実行します

library(GGally)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))

結果は次のプロットになります。

ここに画像の説明を入力

繰り返しますが、新しいセッションで開始し、ロードされたdplyrで同じスクリプトを実行します

library(GGally)
library(dplyr)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))

結果:

エラー: (リスト) オブジェクトを型 'double' に強制することはできません

library(.)ステートメントの順序は重要ではないことに注意してください。

質問

  1. コードサンプルに何か問題がありますか?
  2. 問題を克服する方法はありますか (いくつかの名前空間関数を介して)?
  3. それともこれはバグですか?

より大きな分析ではdplyrggparcoord(.)の両方が必要ですが、この最小限の例は私が直面している問題を反映しています。

バージョン

  • R @ 3.2.3
  • dplyr @ 0.4.3
  • GGally @ 1.0.1
  • ggplot @ 2.0.0

アップデート

Joran が提供した優れた回答をまとめると、次のようになります。

回答

  1. ggparcoord(.)は、ダイヤモンド データ セット (dplyr がロードされている場合) によって指定されたtbl_df ではなく、data.frameを想定しているため、コード サンプルは実際には間違っています。
  2. この問題は、tbl_dfdata.frameに強制することで解決されます。
  3. いいえ、バグではありません。

作業コードのサンプル:

library(GGally)
library(dplyr)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = as.data.frame(diamonds.samp), columns = c(1, 5:10))
4

2 に答える 2

16

コメントを回答に変換しています...

ここでの GGally パッケージは[、データ フレームでの使用が常に行われている方法で動作する必要があるという合理的な仮定を行っています。ただし、これはすべてハドレーの詩にあり、diamondsデータセットはtbl_dfと同様data.frameです。

dplyrが読み込まれると、 の動作[がオーバーライドされ、これdrop = FALSEが常に のデフォルトになりますtbl_df。したがって、GGallydata[,"cut"]はベクトルを返すことが期待される場所がありますが、代わりに別のデータ フレームを返します。

...具体的には、実行しようとしているときに、例でエラーがスローされます。

data[, fact.var] <- as.numeric(data[, fact.var]). 

データフレームのままなのでdata[,fact.var]、リストは機能しas.numericません。

これはバグではないというあなたの結論については、おそらく.... おそらく。少なくとも、GGallyパッケージの作成者がこの問題に対処するためにすべきことはおそらくないでしょう。tbl_dfHadley で書かれていないパッケージでを使用すると、問題が発生する可能性があることに注意してください。

[ご指摘のとおり、余分なクラス属性を削除すると、R が通常の方法を使用するように戻るため、問題が修正されます。

于 2016-02-11T01:50:06.360 に答える