更新我在下面发布了我的解决方案,罪魁祸首是我自己的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())
删除所有对象后不会发生错误,但我仍然不清楚导致此错误的对象是什么或为什么 - 我怎么能弄清楚这一点?
有谁知道可能出了什么问题?
答案 0 :(得分:2)
我无法返回您在上面发布的相同错误消息。运行代码段时,我收到以下错误:
Error: geom_pointrange requires the following missing aesthetics: ymin, ymax
因此,geom_pointrange()
期待ymin
和ymax
的参数。我将由您填写相关信息以填写这些参数,但此代码执行:
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不使用命名空间引起的 - 这将在下一个版本中修复。