【发布时间】:2014-09-25 17:31:25
【问题描述】:
我已经对此错误进行了大量研究,在所有其他情况下,似乎在缺少括号或括号时会出现此错误。但是,我已经搜索了我的代码,但我在任何地方都没有看到。在抛出错误之前,代码似乎没有读取我的完整 aes 对象:
我正在创建一个函数,该函数将创建一个 ggplot 对象,该对象在我的图表上绘制参考线和注释。这是函数:
create_geom_segments <- function(labelx, labely, text_label, color) {
geom_obj <- (
geom_segment(aes(x=0, y=labely, xend =labelx, yend=labely), col = color, linetype = "dashed") +
geom_segment(aes(x=labelx, y=0,xend=labelx, yend=labely), col = color, linetype = "dashed") +
annotate("text", x=labelx, y=labely + 3, label=text_label)
)
return(geom_obj)
}
当我使用通用输入运行它时,例如
test <- create_geom_segments(0,10, "test", "red")
我明白了:
Error in geom_segment(mapping = aes(x = 0, y = labely, xend = labelx, :
non-numeric argument to binary operator
在使用此函数在函数之外成功创建这些对象后,我正在构建此函数:
new_graph <- (p + geom_segment(aes(x=0,y = x, xend = days_x, yend =x), col = "red", linetype = 'dashed') + geom_segment(aes(x=days_x, y = 0, xend = days_x, yend = x)
, col = "red", linetype = 'dashed') + annotate("text", x= days_x, y = x + 3, label = text ))
我没有收到此代码的任何错误,它按预期工作。
【问题讨论】:
-
另外,您可能想避免使用
+,而是使用list(geom_xxx(), geom_yyy())。 -
谢谢,两位! baptiste 让这个错误消失了,然后它没有正确读取我的输入,这通过切换到 aes_string 来修复。我现在唯一的问题是 annotate() 函数没有读取函数输入。有什么想法吗?
-
annotate 只是一个 geom 的封装,
inherit.aes=FALSE,你可以用合适的 geom 层替换它。 -
您可能想在下面发布您的解决方案并接受它。
-
谢谢,这是我第一次发帖