ggplot2与R中的其他软件包不兼容?

时间:2010-10-17 14:02:12

标签: r ggplot2

我正在修改提交的论文,并希望用闪亮的新ggplot2版本替换旧的格子图形。但是,我遇到了ggplot2和两个软件包之间的兼容性问题,这对我的分析,硬币和手臂来说绝对至关重要。从手册

执行以下示例时
qplot(sleep_rem / sleep_total, awake, data = msleep)

我收到一条错误消息:

   Error in function (classes, fdef, mtable)  : 
   unable to find an inherited method for function "empty", for signature "data.frame"

只要硬币或手臂都装好。

以下是详细信息:

运行R 2.10.1,清空.RData文件

require(ggplot2)
require(xtable)
require(MASS)
require(gdata)
require(car)
require(Hmisc)
require(psych)

qplot(sleep_rem / sleep_total, awake, data = msleep)

require(coin)
qplot(sleep_rem / sleep_total, awake, data = msleep)

require(arm)
qplot(sleep_rem / sleep_total, awake, data = msleep)

这是否可与R 2.12重现?如果没有,是否值得升级?我必须承认我不愿更新工作系统,特别是在紧迫的截止日期。

1 个答案:

答案 0 :(得分:7)

这只是硬币包似乎不相容。原因是其中一个与coin一起加载的包(确切地说modeltools)也包含一个掩盖plyr函数empty()的函数empty()。更新到R 2.12不会改变一件坏事,因为这两个包都是由其他作者提供的。您应该邮寄ggplot包的作者并告诉他在他的代码中指定plyr::empty()。或者甚至来自plyr包的人,因为问题可能实际存在。

可能的黑客可能是:

require(coin)
empty <- plyr::empty
qplot(sleep_rem / sleep_total, awake, data = msleep)
rm(empty)

这适用于2.11.1使用以下数据框:

msleep <- data.frame(
    sleep_rem=c(1,2,3,4,5),
    sleep_total=c(10,20,30,40,50),
    awake=c(5,4,3,2,1)
)

确保在绘图后立即从工作区中删除empty。否则,您可能会遇到其他加载的软件包的问题。加载包coin后,您必须对每个绘图执行此操作。

相关问题