【发布时间】:2011-02-20 16:33:35
【问题描述】:
完全披露:此问题在ggplot2 google group 上重复出现
我正在开发一个大量使用ggplot2 的软件包。我创建了自己的 geom —geom_rug_alt — 作为将地毯边缘放置在绘图的顶部/右侧而不是默认位置的一种方式。
我的问题是,当 geom_rug_alt() 在 single script 中定义和调用时,它似乎绘制得很好。 (请自己尝试验证。)但是,在我的包中,geom_rug_alt() 定义在一个文件 (CommonFunctions.R) 中并在另一个文件中调用(Residuals() 更大函数 foo.R 的函数)。当我在某事上调用 foo.R 时,我收到此错误:
Error in geom_rug_alt(aes(x = NULL, y = within.group.residuals, color = factor(within.1.sd.of.the.mean.of.all.residuals)), :
object 'GeomRugAlt' not found
现在,我已经做了几件事(Hadley 在this thread 中建议)以确保geom_rug_alt() 在包中正常工作:
我将
GeomRugAlt定义为一个proto对象,该对象位于我的包中的一个基本上称为CommonFunctions.R的文件中。CommonFunctions.R包含我的example script 的第 3-42 行。在
CommonFunctions.R中,我确定在GeomRugAlt的定义之后包括geom_rug_alt的build_accessor()行(我的example script 中的第42 行)在包
DESCRIPTION文件中,我有一个collate:行,其中CommonFunctions.R首先出现- 在包
DESCRIPTION文件中,我有一个LazyLoad: false行 - 在
CommonFunctions.R中,我在将GeomRugAlt定义为proto对象之前包含了一个require(ggplot2)调用。 - 在
foo.R中,我在调用geom_rug_alt()之前在Residuals()中添加了一个require(ggplot2)调用。
我不确定我还缺少什么。鉴于我的 example script 运行良好,我怀疑问题不在于我的 geom 不起作用,而是我在包开发过程中做错了什么。
很抱歉重复了这个问题,但我似乎无法找到问题的彻底解决方案:-(
【问题讨论】:
-
您是否将
export(geom_rug_alt)放入NAMESPACE文件中? -
@Sascha - 行得通!实际上,它必须是
export(GeomRugAlt),而不是export(geom_rug_alt),因为GeomRugAlt是它没有找到的对象。您能否将其发布为答案,以便我接受? -
如果你的描述和命名空间文件是正确的,你不应该需要手动要求 ggplot2。我还建议运行
R CMD check -
@Hadley - 在我的包上运行 R CMD 检查后,我得到了许多其他错误:geom_rug_alt: no visible binding for global variable ‘GeomRugAlt’
-
我建议您尽可能修复所有错误,然后在某处提供包源。