2014-09-25 69 views
3

我已經對這個錯誤做了相當多的研究,並且在所有其他情況下,似乎在缺少括號或paren時會顯示此錯誤。但是,我已經搜遍了我的代碼,而且我沒有看到任何地方。看起來代碼並沒有在拋出錯誤之前讀取完整的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)  
} 

當我跑這跟一般的輸入,如

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

我沒有得到這個代碼的任何錯誤,它按預期工作。

+0

閱讀'?aes_string'。 – joran 2014-09-25 17:32:06

+0

另外,您可能想要避免使用'+',使用'list(geom_xxx(),geom_yyy ())''而不是 – baptiste 2014-09-25 17:34:35

+0

謝謝!baptiste得到這個錯誤消失了,然後它沒有正確的讀取我的輸入,這是通過切換到aes_string來修復的。我現在唯一的問題是annotate()函數是沒有閱讀功能輸入任何想法? – emilylinndb 2014-09-25 17:48:30

回答

2

完整的解決方案在此,感謝巴蒂斯特和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對象之間+語法來創建列表改變。僅當從返回的對象調用這些對象時,我使用了結果[[i]]。這刪除了我報告的原始錯誤。接下來的問題是,它不能識別我的函數輸入labelx,並且不太合適。
  • 從aes()更改爲aes_string()以獲取識別函數輸入的函數。
  • 最後,註釋未識別功能輸入。更改爲geom_text,如上面所寫,以解決問題。 (也添加了偏移功能,所以我的標籤不在最上面)
  • 相關問題