Коэффициент переупорядочивания дает разные результаты, в зависимости от того, какие пакеты загружаются

Я хотел создать барплот, в котором бары были упорядочены по высоте, а не по алфавиту по категориям. Это отлично работало, когда единственным пакетом, который я загрузил, был ggplot2. Однако, когда я загрузил еще несколько пакетов и запустил тот же код, который создал, отсортировал и построил мой фрейм данных, бары снова вернулись к сортировке в алфавитном порядке.

Я проверял фрейм данных каждый раз, используя str() и оказалось, что атрибуты фрейма данных теперь разные, хотя каждый раз я запускал один и тот же код.

мой код и вывод перечислены ниже. Может ли кто-нибудь объяснить различное поведение? Почему загрузка нескольких явно несвязанных пакетов (несвязанных в том смысле, что ни одна из функций, которые я использую, не маскируется вновь загруженными пакетами) изменяет результат запуска

1 ответов


это происходит потому, что:

  1. gmodels импорт gdata
  2. gdata создает новый метод reorder.factor

начать чистый сеанс. Затем:

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

загрузите gdata (или нагрузка 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