gpt4 book ai didi

r - 二元运算符 aes 函数的非数字参数

转载 作者:行者123 更新时间:2023-12-02 01:45:16 25 4
gpt4 key购买 nike

我对这个错误做了很多研究,在所有其他情况下,当缺少括号或括号时,似乎会出现此错误。但是,我已经搜索了我的代码,但在任何地方都看不到。似乎代码在抛出错误之前没有读取我的完整 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 ))

这段代码没有出现任何错误,它按预期工作。

最佳答案

这里有完整的解决方案,感谢 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_segment 对象之间使用 + 语法更改为创建列表。仅供引用,当从返回的对象调用这些对象时,我使用了 result[[i]]。这消除了我报告的原始错误。下一个问题是它无法识别我的函数输入 labelx 和 labely。
  • 从 aes() 更改为 aes_string() 以获得识别函数输入的函数。
  • 最后,注释无法识别函数输入。更改为上面写的 geom_text 以修复。 (还向函数添加了偏移量,因此我的标签不在行的顶部。
  • 关于r - 二元运算符 aes 函数的非数字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044662/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com