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

Mar*_*ers 3 r ggplot2

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

qplot(sleep_rem / sleep_total, awake, data = msleep)
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

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

一旦硬币或手臂被装上.

以下是详细信息:

运行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)
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*eys 7

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

一个可能的黑客可能是:

require(coin)
empty <- plyr::empty
qplot(sleep_rem / sleep_total, awake, data = msleep)
rm(empty)
Run Code Online (Sandbox Code Playgroud)

这适用于使用以下数据框的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)
)
Run Code Online (Sandbox Code Playgroud)

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

  • 这个问题应该在ggplot2的开发版本中修复. (3认同)