当我在导入ggplot2的包中使用它时,找不到ggplotGrob函数

时间:2015-02-05 18:08:44

标签: r import ggplot2 namespaces dependencies

我有一个包在这里 使用ggplot2的Github因此我将其导入我的NAMESPACE文件和描述文件

NAMESPACE:

# Generated by roxygen2 (4.1.0): do not edit by hand

export(HybRIDS)
exportClasses(HybRIDS)
import(Biostrings)
import(ape)
import(ggplot2)
import(grid)
import(gridExtra)
importFrom(png,readPNG)
useDynLib(HybRIDS)

描述:

Package: HybRIDS
Type: Package
Title: Detection and dating of Recombinant Regions in DNA sequence data.
Version: 1.0
Date: 2014-12-18
Author: Ben J. Ward
Maintainer: Ben J. Ward <b.ward@uea.ac.uk>
Description: An R package for the detection and dating of
    Recombinant Regions in DNA sequence data.
License: GPL-2
Depends: methods
Imports: 
    Rcpp (>= 0.11.0),ggplot2,grid,gridExtra,png,ape,Biostrings
LinkingTo: Rcpp
Suggests: knitr,testthat
VignetteBuilder: knitr

然而,当我使用包中的一些绘图功能时,我收到错误:

Error: could not find function "ggplotGrob"

我在RStudio中的回溯将我带到了我的包裹中的这几行:

arrangeGrob(bars, legendgrob, widths = c(1, 0.13), ncol = 2) at TripletReference.R#244
6 plotBars(plottingSettings) at TripletReference.R#157
5 x$plotTriplet(plotSettings) at TripletReference.R#361
4 FUN(X[[1L]], ...) 
3 lapply(tripletsToPlot, function(x) x$plotTriplet(plotSettings)) at TripletReference.R#361
2 triplets$plotTriplets(Selections, plottingSettings) at HybRIDSObject.R#253
1 test$plotTriplets() 

在TripletReference.R#244上使用arrangeGrob的那条线非常简单。它需要两个输入,一个是函数中先前生成的ggplot对象,如下所示:

bars <- ggplot(plottingFrame, aes(x = X, y = as.factor(Y))) +
                               geom_raster(aes(fill = colour)) + scale_fill_identity() +
                               xlab("Approximate Base Position") +
                               ylab("Sequence Name") +
                               scale_x_continuous(breaks = c(seq(from = 1, to = plottingSettings$MosaicScale, by = plottingSettings$MosaicScale / 10), plottingSettings$MosaicScale), labels = c(frame$bpX[seq(from = 1, to = plottingSettings$MosaicScale, by = plottingSettings$MosaicScale / 10)], max(frame$bpX))) + 
                               scale_y_discrete(labels = c(ContigNames[3], ContigNames[2], ContigNames[1]))

这很冗长,但没有什么特别的 - 它是ggplot和一些geoms和scale的相当正常的使用。

第二个输入是从图像创建的rasterGrob:

legendgrob <- rasterGrob(image=legend)

所有的ArrangeGrob线应该做的是把两件事并排放在一个grob中,并排 - 一个有两列的grob。

注意我没有上述任何一个,试图使用我自己找不到的功能(ggplotGrob函数)。

我已经用?ggplotGrob检查了R的ggplotGrob文档,当我的包被加载时,如果我执行ggplot2 :: ggplotGrob,则会返回以下内容:

function (x) 
{
    ggplot_gtable(ggplot_build(x))
}
<environment: namespace:ggplot2>

所以我知道ggplot2名称空间已被加载 - 我的问题是为什么我的软件包会抛出此错误,即使我已导入ggplot2?现在唯一取决于ggplot2的是统计数据和方法吗?

谢谢, 本W。

1 个答案:

答案 0 :(得分:3)

尝试在DESCRIPTION文件中的依赖而非导入下添加ggplot2

在使用grid.arrange中的gridExtra函数时,我遇到了类似的问题,此解决方案对我有用。

我的,对此问题的初步了解是,gridExtraggplotGrob库尚未加载时调用ggplot2函数。