ggplot“重命名错误”

时间:2011-01-17 18:37:59

标签: r ggplot2

更新我在下面发布了我的解决方案,罪魁祸首是我自己的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())删除所有对象后不会发生错误,但我仍然不清楚导致此错误的对象是什么或为什么 - 我怎么能弄清楚这一点?

有谁知道可能出了什么问题?

3 个答案:

答案 0 :(得分:2)

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

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))

答案 1 :(得分:1)

错误是由其中一个对象引起的(感谢来自@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"
...

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

解决方案:重命名新的rename功能...将来如何防止这种情况?也许可以研究名称空间的使用。

答案 2 :(得分:1)

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