18

バーがカテゴリ別のアルファベット順ではなく、高さ順に並べられた棒グラフを作成したかったのです。私がロードした唯一のパッケージがggplot2だったとき、これはうまくいきました。しかし、さらにいくつかのパッケージを読み込んで、データ フレームを作成、並べ替え、プロットしたのと同じコードを実行すると、バーは再びアルファベット順に並べ替えられていました。

を使用するたびにデータ フレームをチェックしたstr()ところ、毎回同じコードを実行したにもかかわらず、データ フレームの属性が異なることがわかりました。

私のコードと出力を以下に示します。異なる動作を説明できる人はいますか? 明らかに無関係ないくつかのパッケージをロードすると (新しくロードされたパッケージによって、使用している関数がマスクされていないように見えるという意味で無関係)、transform()関数の実行結果が変わるのはなぜですか?

ケース 1: ggplot2 をロードしただけ

library(ggplot2)

group = c("C","F","D","B","A","E")
num = c(12,11,7,7,2,1)
data = data.frame(group,num)
data1 = transform(data, group=reorder(group,-num))

> str(data1)
'data.frame':   6 obs. of  2 variables:
 $ group: Factor w/ 6 levels "C","F","B","D",..: 1 2 4 3 5 6
  ..- attr(*, "scores")= num [1:6(1d)] -2 -7 -12 -7 -1 -11
  .. ..- attr(*, "dimnames")=List of 1
  .. .. ..$ : chr  "A" "B" "C" "D" ...
 $ num  : num  12 11 7 7 2 1

ケース 2: さらにいくつかのパッケージをロードしてから、同じコードを再度実行する

library(plyr)
library(xtable)
library(Hmisc)
library(gmodels)
library(reshape2)
library(vcd)
library(lattice)

group = c("C","F","D","B","A","E")
num = c(12,11,7,7,2,1)
data = data.frame(group,num)
data1 = transform(data, group=reorder(group,-num))

> str(data1)
'data.frame':   6 obs. of  2 variables:
 $ group: Factor w/ 6 levels "A","B","C","D",..: 3 6 4 2 1 5
 $ num  : num  12 11 7 7 2 1

更新: SessionInfo()

ケース 1: ggplot2 をロードした後に sessionInfo() を実行した

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
  [1] C/en_US.UTF-8/C/C/C/C

attached base packages:
  [1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
  [1] ggplot2_0.9.1

loaded via a namespace (and not attached):
  [1] MASS_7.3-18        RColorBrewer_1.0-5 colorspace_1.1-1   dichromat_1.2-4    digest_0.5.2       grid_2.15.0       
[7] labeling_0.1       memoise_0.1        munsell_0.3        plyr_1.7.1         proto_0.3-9.2      reshape2_1.2.1    
[13] scales_0.2.1       stringr_0.6        tools_2.15.0

ケース 2: 追加のパッケージをロードした後に sessionInfo() を実行した

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
  [1] C/en_US.UTF-8/C/C/C/C

attached base packages:
  [1] grid      splines   stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
  [1] lattice_0.20-6   vcd_1.2-13       colorspace_1.1-1 MASS_7.3-18      reshape2_1.2.1   gmodels_2.15.2  
[7] Hmisc_3.9-3      survival_2.36-14 xtable_1.7-0     plyr_1.7.1       ggplot2_0.9.1   

loaded via a namespace (and not attached):
  [1] RColorBrewer_1.0-5 cluster_1.14.2     dichromat_1.2-4    digest_0.5.2       gdata_2.8.2        gtools_2.6.2      
[7] labeling_0.1       memoise_0.1        munsell_0.3        proto_0.3-9.2      scales_0.2.1       stringr_0.6       
[13] tools_2.15.0
4

1 に答える 1

13

これは、次の理由で発生します。

  1. gmodels輸入品gdata
  2. gdataの新しいメソッドを作成しますreorder.factor

クリーン セッションを開始します。それで:

methods("reorder")
[1] reorder.default*    reorder.dendrogram*

今度は load gdata(または load gmodels、同じ効果があります):

library(gdata)
methods("reorder")
[1] reorder.default*    reorder.dendrogram* reorder.factor 

reorder.factorベースに存在しないため、マスキングがないことに注意してください

問題を再現しますが、今回は別のパッケージを明示的に呼び出します。

group = c("C","F","D","B","A","E")
num = c(12,11,7,7,2,1)
data = data.frame(group,num)

ベース R バージョン (を使用reorder.default):

str(transform(data, group=stats:::reorder.default(group,-num)))
'data.frame':   6 obs. of  2 variables:
 $ group: Factor w/ 6 levels "C","F","B","D",..: 1 2 4 3 5 6
  ..- attr(*, "scores")= num [1:6(1d)] -2 -7 -12 -7 -1 -11
  .. ..- attr(*, "dimnames")=List of 1
  .. .. ..$ : chr  "A" "B" "C" "D" ...
 $ num  : num  12 11 7 7 2 1

gdataバージョン (を使用) reorder.factor:

str(transform(data, group=gdata:::reorder.factor(group,-num)))
'data.frame':   6 obs. of  2 variables:
 $ group: Factor w/ 6 levels "A","B","C","D",..: 3 6 4 2 1 5
 $ num  : num  12 11 7 7 2 1
于 2012-06-07T21:36:08.173 に答える