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