重新排序因子会给出不同的结果,具体取决于加载的包

2024-04-17

我想创建一个条形图,其中条形按高度排序,而不是按类别按字母顺序排序。当我加载的唯一包是 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

更新:会话信息()

案例 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

发生这种情况是因为:

  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

The 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新排序因子会给出不同的结果,具体取决于加载的包 的相关文章

随机推荐

  • 对 F# 联合类型列表进行操作

    这是我的问题的延续F 联合类型列表 https stackoverflow com questions 13770911 f list of union types 感谢有用的反馈 我能够创建一个列表Reports with Report要
  • waveOutWrite 和 waveOutGetPosition 死锁问题

    我正在开发一个使用连续播放音频的应用程序waveOut API来自winmm dll 该应用程序使用 leapfrog 缓冲区 它基本上是一堆转储到音频队列中的样本数组 Windows 按顺序无缝播放它们 并且当每个缓冲区完成时 Windo
  • 如何在 2.0 和 1.x 之间切换 TensorFlow 版本?

    有没有办法切换tensorflow的版本 当我使用conda安装tensorflow 2 0时 它更新了很多东西 甚至是python 跑步时conda list它显示两个版本 张量流2 0 0 mkl py37h66b46cc 0张量流 1
  • 测试 AWS Elastic Beanstalk 扩展

    我已经在弹性豆茎中设置了一个服务器 需要时 应该将实例数量从 1 增加到最多 4 但是 我有一个潜在的怀疑 当它启动一个新实例时 该实例将无法正确配置 因为我无法安装用于 Python 的 mySQL 模块 无需 ssh 进入实例并手动设置
  • 如何通过反射加载所有 Entity Framework 4.1 实体配置实体?

    In my OnModelCreating我的数据上下文的方法目前正在手动映射所有实体配置映射类 例如 protected override void OnModelCreating DbModelBuilder modelBuilder
  • 将数据批量插入 Oracle 数据库的最佳方法

    我将创建很多数据脚本 例如 INSERT INTO 和 UPDATE 如果不是 1 000 000 条记录 也会有 100 000 条以上记录 快速将这些数据导入 Oracle 的最佳方法是什么 我已经发现 SQL Loader 不适合这样
  • 解析 LDAP dn 的正则表达式

    我有以下字符串 cn abcd cn groups dc domain dc com 这里可以使用正则表达式来提取第一个之后的字符串吗cn 在第一个之前 在上面的例子中 答案应该是abcd cn 大多数语言会将匹配提取为 1 或 match
  • DOMNodeRemovedFromDocument 的简单 MutationObserver 版本

    我将一些功能附加到 DOM 元素 并希望能够在从 DOM 中删除该元素时清除所有引用 以便可以对其进行垃圾收集 我检测元素删除的初始版本是这样的 var onremove function element callback var dest
  • 控制空格子面板的放置

    当绘制的面板少于完整网格时 您会得到一个没有面板的间隙 大多数格函数将间隙放在右上角 但我希望将其放在右下角 如marginal plot确实 见图 有没有办法让其他晶格函数也能做同样的事情 我知道面板顺序是由调节变量的因子水平的顺序决定的
  • 单击我网站上的任何链接 (a) 时如何运行 jQuery 函数

    我有一个基于 corecommerce 系统的新网站 该系统对 HTML 和 PHP 没有太多访问权限 我唯一可以使用的是 JavaScript 他们的系统目前的页面加载速度不是很好 所以我希望至少客户在等待 5 8 秒页面加载时知道发生了
  • C 中声明后可以初始化数组吗?

    有没有办法在实际初始化变量之前声明这样的变量 CGFloat components 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 我希望它声明类似这样的内容 除非这不起作用 CGFloat components 8
  • 如何通过lcov和代码覆盖率比较来处理不同目录中的.gcda和.gcno文件

    我可以通过 lcov 在同一目录中使用 gcda 文件和 gcno 文件生成 info 文件 但是如何在不同位置使用 gcda 文件和 gcno 文件生成代码覆盖率 例如 Users swd Library Developer Xcode
  • 对一系列点重新采样

    我有一个 3d 点数组 想象一下球的轨迹 有 X 个样本 现在 我想对这些点重新采样 以便我有一个新数组 其中包含 y 个样本的位置 y 可以大于或小于 x 但不能小于 1 始终至少有 1 个样本 将原始数组重新采样为新数组的算法会是什么样
  • 名称冲突:test2 类型的方法 add(Object) 与 HashSet 类型的 add(E) 具有相同的擦除功能,但不会覆盖它

    导入 java util class A extends HashSet
  • 如何在Python中仅在回车符和readlines上进行分割?

    我有一个包含两者的文本文件 n and r n行尾标记 我只想分割 r n 但无法找到使用 python 的 readlines 方法来执行此操作的方法 有一个简单的解决方法吗 正如 eskaev 提到的 如果没有必要 您通常会希望避免将完
  • 如何使用xPages上传控件将上传的文件存储到本地文件系统?

    如何使用xPages上传控件将上传的文件存储到本地磁盘 我的 xPages 上只有一个带有文本字段和 fileUpload 控件的简单表单 没有与文档的绑定 因此我访问 xpages 组件以在提交时获取它们的值 如何从我的 java 代码访
  • 我应该创建代理键而不是复合键吗?

    结构 Actor lt ActorMovie gt Movie ActorMovie ActorID fk MovieId fk gt pk ActorID MovieID 我应该创建一个代理键吗ActorMovie桌子是这样的 Actor
  • iOS Swift - 如何以编程方式为所有按钮分配默认操作

    我正在开发一个处于原型开发阶段的应用程序 某些界面元素没有通过情节提要或以编程方式分配给它们的任何操作 根据用户体验指南 我想在应用程序中找到这些 非活动 按钮 并让它们在测试期间点击时显示 功能不可用 警报 这可以通过 UIButton
  • Javascript 中数组大小如何工作

    在 JavaScript 中 如果将数组设置为大小 5 var foo new Array 5 这只是初始尺寸吗 创建后可以扩展元素数量吗 是否也可以做这样的事情 arr new Array 然后一一分配元素 提前致谢 是的 这只是一个初始
  • 重新排序因子会给出不同的结果,具体取决于加载的包

    我想创建一个条形图 其中条形按高度排序 而不是按类别按字母顺序排序 当我加载的唯一包是 ggplot2 时 这工作得很好 然而 当我加载更多的包并运行创建 排序和绘制数据框的相同代码时 条形图已恢复为再次按字母顺序排序 我每次使用时都会检查