【问题标题】:ggplot "error in rename"ggplot“重命名错误”
【发布时间】:2011-01-17 18:37:59
【问题描述】:

更新我已经在下面发布了我的解决方案,罪魁祸首是我自己的 rename 函数覆盖了 reshape::rename


直到今天,我一直在使用 ggplot R 包,没有遇到什么麻烦。今天,我使用以前工作的代码时遇到错误,当我将它调试到最小的工作示例时,它仍然会出错;

如果我这样做:

library(ggplot2)
d<- data.frame(x=1:3,y=1:3)
ggplot(data=d) + geom_line(aes(x,y))   

返回如下错误:

Error in rename(x, .base_to_ggplot) : 
  unused argument(s) (.base_to_ggplot)

回溯是:

6: rename(x, .base_to_ggplot)
5: rename_aes(aes)
4: aes()
3: structure(list(data = data, layers = list(), scales = Scales$new(), 
       mapping = mapping, options = list(), coordinates = CoordCartesian$new(), 
       facet = FacetGrid$new(), plot_env = environment), class = "ggplot")
2: ggplot.data.frame(data = d, aes = c(x, y))
1: ggplot(data = d, aes = c(x, y))

使用rm(list=ls()) 删除所有对象后,该错误不会发生,但我仍然不清楚是什么对象导致了此错误或原因 - 我该如何解决这个问题?

有谁知道哪里出了问题?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我无法返回您在上面发布的相同错误消息。运行您的代码 sn-p 时,我收到以下错误:

    Error: geom_pointrange requires the following missing aesthetics: ymin, ymax
    

    因此,geom_pointrange() 期待 yminymax 的参数。我将由您来填写您的相关信息,以了解这些参数应该包含哪些内容,但此代码会执行:

    ggplot(data=d) + geom_pointrange(aes(x,y, ymin = y - .5, ymax = y + .5))

    【讨论】:

    • 对此感到抱歉。我快速编写了示例,而不是从终端复制它。我收到 geom_line 的错误,我已经更改了示例代码。
    • @David - 哦!我很抱歉。但是,我也能够很好地执行更新的代码。听起来这可能是您的环境中引起问题的东西......而且我可能不是在那个领域提供帮助的最佳人选。如果您在空白环境中启动新的 R 实例,您能否重现该问题?
    • 不,我无法重现该错误...我可以通过rm(list=ls()) 让它不再重现。至少我有一些东西可以用来调试。
    • @David - 我可能会先查看您尝试建模的对象的str(),并确保它与您期望的一样......正如您所知道的 ggplot2 所期望的那样数据框。或者你的环境中有一个对象掩盖了 ggplot2 试图调用的函数的名称?
    【解决方案2】:

    问题是由于 ggplot2 不使用命名空间引起的 - 这将在下一个版本中修复。

    【讨论】:

      【解决方案3】:

      错误是由其中一个对象引起的(感谢来自@Chase 的指针)。

      这是我如何调试并找到罪魁祸首的。重要的部分是使用try() 函数,即使出现错误也能保持 for 循环运行

      foo <- ls() #get a static list of all suspect objects
      for(i in 1:length(foo)) {
          print(foo[i])
          rm(list=foo[i])
          try(ggplot()+geom_point(aes(x=1:2,y=1:2)))
      }
      

      这导致以下输出:

      ...
      [1] "45 reg.model"
      Error in rename(x, .base_to_ggplot) : 
        unused argument(s) (.base_to_ggplot)
      [1] "46 reg.parms"
      Error in rename(x, .base_to_ggplot) : 
        unused argument(s) (.base_to_ggplot)
      [1] "47 rename"
      [1] "48 samples"
      ...
      

      啊哈!是我自己的函数rename 导致了错误,因为ggplot2 依赖于reshape::rename

      解决方案:重命名新的rename 函数...以后如何防止这种情况发生?也许研究一下命名空间的使用。

      【讨论】:

      • 我喜欢您使用ls() 进行调试,我不会想到这一点。很高兴它成功了!
      猜你喜欢
      • 2023-03-03
      • 2019-09-04
      • 2014-01-31
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2013-06-17
      相关资源
      最近更新 更多