Коэффициент переупорядочивания дает разные результаты, в зависимости от того, какие пакеты загружаются
Я хотел создать барплот, в котором бары были упорядочены по высоте, а не по алфавиту по категориям. Это отлично работало, когда единственным пакетом, который я загрузил, был ggplot2. Однако, когда я загрузил еще несколько пакетов и запустил тот же код, который создал, отсортировал и построил мой фрейм данных, бары снова вернулись к сортировке в алфавитном порядке.
Я проверял фрейм данных каждый раз, используя str()
и оказалось, что атрибуты фрейма данных теперь разные, хотя каждый раз я запускал один и тот же код.
мой код и вывод перечислены ниже. Может ли кто-нибудь объяснить различное поведение? Почему загрузка нескольких явно несвязанных пакетов (несвязанных в том смысле, что ни одна из функций, которые я использую, не маскируется вновь загруженными пакетами) изменяет результат запуска
1 ответов
это происходит потому, что:
-
gmodels
импортgdata
-
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