【问题标题】:"object not found" error when creating a new geom for a package为包创建新几何时出现“找不到对象”错误
【发布时间】: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() 在包中正常工作:

  1. 我将GeomRugAlt 定义为一个proto 对象,该对象位于我的包中的一个基本上称为CommonFunctions.R 的文件中。 CommonFunctions.R 包含我的example script 的第 3-42 行。

  2. CommonFunctions.R 中,我确定在GeomRugAlt 的定义之后包括geom_rug_altbuild_accessor() 行(我的example script 中的第42 行)

  3. 在包DESCRIPTION 文件中,我有一个collate: 行,其中CommonFunctions.R 首先出现

  4. 在包DESCRIPTION文件中,我有一个LazyLoad: false
  5. CommonFunctions.R 中,我在将GeomRugAlt 定义为proto 对象之前包含了一个require(ggplot2) 调用。
  6. 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’
  • 我建议您尽可能修复所有错误,然后在某处提供包源。

标签: r ggplot2


【解决方案1】:

export(GeomRugAlt) 放入NAMESPACE 文件中。

【讨论】:

  • 您不需要导出该对象。
  • @Hadley - 我同意。我的理解是,导出它可以让用户使用它,这不是必需的。我们只希望 foo.R 能够看到 GeomRugAlt。
猜你喜欢
  • 1970-01-01
  • 2020-08-22
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多