R 二进制运算符aes函数的非数值参数

R 二进制运算符aes函数的非数值参数,r,ggplot2,R,Ggplot2,我对这个错误做了很多研究,在所有其他情况下,当缺少括号或括号时,这个错误就会出现。然而,我已经搜索了我的代码,我没有看到任何地方。在抛出错误之前,代码似乎没有读取我的完整aes对象: 我正在创建一个函数,该函数将创建一个ggplot对象,用于在图表上绘制参考线和注释。以下是函数: create_geom_segments <- function(labelx, labely, text_label, color) { geom_obj <- ( geom_segment(aes

我对这个错误做了很多研究,在所有其他情况下,当缺少括号或括号时,这个错误就会出现。然而,我已经搜索了我的代码,我没有看到任何地方。在抛出错误之前,代码似乎没有读取我的完整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)    
}
在使用以下方法在函数外部成功创建这些对象后,我正在构建此函数:

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

new_graph这里有完整的解决方案,感谢baptiste和joran:

create_geom_segments <- function(labelx, labely, text_label, line_color, xoffset, yoffset) {
geom_obj <- list(
geom_segment(aes_string(x=0, y=labely, xend =labelx, yend=labely), col =
    line_color, linetype =      "dashed"),
geom_segment(aes_string(x=labelx, y=0,xend=labelx, yend=labely), col =
    line_color, linetype = "dashed"),
geom_text(aes_string(x=labelx + xoffset, y=labely + yoffset), 
    label = text_label, data = data.frame()) 
)
return(geom_obj)    
}

创建geom\u段同样,您可能希望避免
+
,而是使用
列表(geom\u xxx(),geom\u yyy())
。谢谢!巴普蒂斯特消除了这个错误,然后它没有正确地读取我的输入,这是通过切换到aes_字符串修复的。我现在唯一的问题是annotate()函数没有读取函数输入。有什么想法吗?annotate只是geom的一个包装,使用
inherit.aes=FALSE
,您可以用合适的geom层替换它。您可能想在下面发布您的解决方案,并接受它。谢谢,这是我第一次发布
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 ))
create_geom_segments <- function(labelx, labely, text_label, line_color, xoffset, yoffset) {
geom_obj <- list(
geom_segment(aes_string(x=0, y=labely, xend =labelx, yend=labely), col =
    line_color, linetype =      "dashed"),
geom_segment(aes_string(x=labelx, y=0,xend=labelx, yend=labely), col =
    line_color, linetype = "dashed"),
geom_text(aes_string(x=labelx + xoffset, y=labely + yoffset), 
    label = text_label, data = data.frame()) 
)
return(geom_obj)    
}