【发布时间】:2012-06-11 23:05:39
【问题描述】:
我想创建一个条形图,其中条形按高度而不是按字母顺序按类别排序。当我加载的唯一包是 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
【问题讨论】:
-
你能提供
sessionInfo()的输出吗?如果有人可以提供帮助,他们可能必须匹配您的 R 和包版本才能复制它。 -
我可以使用最新的 CRAN 包(在 Ubuntu 上)在 R 2.15.0 上复制它
-
非常有趣。看起来
transform()结果的变化仅在加载gmodels后出现(并且随后分离gmodels并没有修复它)。我很感兴趣...(FWIW,我在 Windows XP 上,运行 R-devel,所以看起来这不是操作系统或版本特定的问题。) -
@joran 我添加了
sessionInfo()的输出作为对我的问题的编辑。 -
您可以通过运行
str获得与大多数ggplot2对象类似的行为,无论是否加载library(proto)。使用proto大大扩展了proto对象的显示范围。
标签: r namespaces masking operator-precedence