Я хочу создать функцию, в которой я могу передать имя переменной в виде строки, и она вернет мне объект ggplot.
Этот работает:
myplot <- function(x, y) {
ggplot(data, aes_string(x = "x", y = "y")) + geom_bar()
}
но в ggplot
документации:
Но в этот момент я понял, что не понимаю, как использовать aes_
(чтобы построить пример, как указано выше, и я не понимаю, как означает enquotation, quotation, quaziquotation. В сети много литературы по этому поводу , но если кто-то может показать мне на этом конкретном примере, как это работает, это, вероятно, даст мне подсказку, чтобы продолжить отсюда.
aes_string
устарел. Если мы передаем строки, то конвертируем в sym
bol и оцениваем с !!
library(ggplot2)
library(dplyr)
myplot <- function(x, y) {
ggplot(data, aes(x= !! rlang::sym(x), y= !! rlang::sym(y))) + geom_bar()
}
Если переходим без кавычек, то используем фигурный-кудрявый оператор{{}}
myplot <- function(x, y) {
ggplot(data, aes(x= {{x}}, y= {{y}})) + geom_bar()
}
Фигурный-кудрявый оператор делает enquo
с !!
myplot <- function(x, y) {
ggplot(data, aes(x= !! enquo(x), y= !! enquo(y))) + geom_bar()
}
Если мы хотим передать либо в кавычках, либо без кавычек, используйте ensym
myplot <- function(x, y) {
ggplot(data, aes(x= !! ensym(x), y= !! ensym(y))) + geom_bar()
}
ПРИМЕЧАНИЕ. Также лучше иметь параметр data
в качестве параметра функции
@PhilippChapkovski, если вы используете myplot(mpg, cyl)
, если это из mtcars
, и в первом случае это myplot("mpg", "cyl")
Также см. x = .data[[x]]
вместо того, чтобы идти по пути sym()
для строк. @PhilippChapkovski, если интересно, вы можете увидеть пример с использованием этого здесь (немного старый; проблема с метками осей больше не существует).
что вы имеете в виду под «пройти без кавычек»?