我目前正在撰寫一個最終回傳 ggplot 的函式。我想為用戶提供更改該 ggplot 不同方面的選項,例如xlab通過在函式中指定它。現在我正在使用這樣的代碼。
library(tidyverse)
d <- sample_n(diamonds,500)
plot_something <- function(data,x,y,x_axis_name=NULL){
if(is.null(x_axis_name)){
p<-ggplot(d,aes_string(x=x,y=y))
geom_point()
} else{
p<-ggplot(d,aes_string(x=x,y=y))
geom_point()
xlab(x_axis_name)
}
return(p)
}
plot_something(data=d, x="depth", y="price",x_axis_name = "random_name")
這很好用,但正如您所見,很多代碼都是重復的,唯一的區別是xlab引數。在這種情況下,它并不算太糟糕,但我的實際功能要復雜得多,如果我還允許用戶修改ylab.
所以我的問題是,是否有一種更優雅的方法可以根據用戶傳遞的引數來修改函式內部的 ggplots。
任何幫助深表感謝!
uj5u.com熱心網友回復:
不需要重復的代碼。您可以根據需要有條件地將圖層添加到基礎圖,如下所示:
library(tidyverse)
d <- sample_n(diamonds, 500)
plot_something <- function(data, x, y, x_axis_name = NULL) {
x_lab <- if (!is.null(x_axis_name)) xlab(x_axis_name)
p <- ggplot(d, aes_string(x = x, y = y))
geom_point()
x_lab
return(p)
}
plot_something(data = d, x = "depth", y = "price", x_axis_name = "random_name")

或者使用ggplot2s 內置機制來選擇默認值,您甚至不需要if條件但可以這樣做:
plot_something <- function(data, x, y, x_axis_name = ggplot2::waiver()) {
p <- ggplot(d, aes_string(x = x, y = y))
geom_point()
xlab(x_axis_name)
return(p)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462760.html
