当我在导入 ggplot2 的包中使用它时,找不到 ggplotGrob 函数
ggplotGrob function is not found when I use it in a package which imports ggplot2
我有一个包裹位于
Github 它使用了 ggplot2,所以我将它导入我的 NAMESPACE 文件和我的 DESCRIPTION FILE
命名空间:
# 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 和一些几何图形和比例的相当正常的使用。
第二个输入是从图像创建的 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.
尝试在您的 DESCRIPTION 文件中添加 ggplot2
depends,而不是 imports。
我在使用 gridExtra
的 grid.arrange
函数时遇到了类似的问题,这个解决方案对我有用。
我对这个问题的初步理解是 gridExtra
在 ggplot2
库尚未加载时调用 ggplotGrob
函数。
我有一个包裹位于 Github 它使用了 ggplot2,所以我将它导入我的 NAMESPACE 文件和我的 DESCRIPTION FILE
命名空间:
# 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 和一些几何图形和比例的相当正常的使用。
第二个输入是从图像创建的 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.
尝试在您的 DESCRIPTION 文件中添加 ggplot2
depends,而不是 imports。
我在使用 gridExtra
的 grid.arrange
函数时遇到了类似的问题,这个解决方案对我有用。
我对这个问题的初步理解是 gridExtra
在 ggplot2
库尚未加载时调用 ggplotGrob
函数。