使用ggublot版本的ggplot2运行ggrepel时,zero_range()出错

时间:2016-09-21 10:12:10

标签: r ggplot2 ggrepel

我最近将R版本升级为3.2.3,并更新了我的软件包。然后,我安装了Githubggplot2和CRAN版ggrepel

正在使用的软件包的版本是:

ggplot2: 2.1.0.9000  
ggrepel: 0.5  
scales: 0.4.0

但是在加载这些包之后,我甚至无法运行为ggrepel提供的示例脚本:

library(ggrepel)  
p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars)))
# Avoid overlaps by repelling text labels
p + geom_text_repel() 

Error in zero_range(from) : x must be length 1 or 2

函数zero_range()来自scales包。但是,对我来说很奇怪的是,如果我从CRAN ggplot2安装(version 2.1.0)ggrepel就会按预期开始工作。
更新或重新安装scalesggrepel没有任何效果。

我记得在我的旧版R 3.1.3中,我从Github安装了ggplot2(使用字幕和标题),并且在那里工作正常。

我的会话信息是:

R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggrepel_0.5        ggplot2_2.1.0.9000

loaded via a namespace (and not attached):
 [1] labeling_0.3     colorspace_1.2-6 scales_0.4.0     assertthat_0.1   lazyeval_0.2.0   plyr_1.8.4      
 [7] tools_3.2.3      gtable_0.2.0     tibble_1.2       Rcpp_0.12.7      grid_3.2.3       munsell_0.4.3

从我的调试中,错误发生在这个函数:

ggproto("LayerInstance", Layer, geom = geom, geom_params = geom_params, 
        stat = stat, stat_params = stat_params, data = data, 
        mapping = mapping, aes_params = aes_params, subset = subset, 
        position = position, inherit.aes = inherit.aes, show.legend = show.legend)

在其中:

function (`_class` = NULL, `_inherit` = NULL, ...) 
{
    e <- new.env(parent = emptyenv())
    members <- list(...)
    if (length(members) != sum(nzchar(names(members)))) {
        stop("All members of a ggproto object must be named.")
    }
    if (length(members) > 0) {
        list2env(members, envir = e)
    }
    if (!is.null(`_inherit`)) {
        if (!is.ggproto(`_inherit`)) {
            stop("`_inherit` must be a ggproto object.")
        }
        e$super <- `_inherit`
        class(e) <- c(`_class`, class(`_inherit`))  ###### Here layeth the error, as I think
    }
    else {
        class(e) <- c(`_class`, "ggproto")
    }
    e
}

但我对解决方案毫无头绪。

1 个答案:

答案 0 :(得分:4)

使用最新的开发版ggrepel,错误消失了。

使用devtools::install_github("slowkow/ggrepel@0.6.2")安装

包版本:

ggplot2    * 2.1.0.9001 2016-10-07 Github (hadley/ggplot2@979004a)
ggrepel    * 0.6.2      2016-10-07 Github (slowkow/ggrepel@254bd61)
scales       0.4.0.9003 2016-10-07 Github (hadley/scales@d58d83a)