У меня есть график, который я повторяю много раз, просто с разными переменными, поэтому я хочу превратить его в функцию:
getSecPlot <- function(data, xvar, yvar, yvarsec, groupvar, ...){
sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
geom_col(aes_string(y = yvar, fill = groupvar), position = "dodge") +
geom_line(aes_string(y = yvarsec), color = groupvar)
}
test <- getSecPlot(freqSevDataAge, xvar = get("agegroup"), yvar = "severity",
yvarsec = "frequency", groupvar = "gender")
Я получаю ошибку:
Неизвестное имя цвета: пол
Я предполагаю, что это потому, что цвет оценивается как color = "gender"
из-за aes_string
.
Как это можно исправить? Я пытаюсь использовать enquo()
и !!
, но это не сработало. Любые советы?
также связано с этим, я хочу масштабировать yvarsec
параметром. Я сделал тебе следующее:
getSecPlot <- функция (data, xvar, yvar, yvarse c, groupvar, ...) {</p>
param <- max(as.numeric(freqSevData$yvar), na.rm = TRUE)/max(as.numeric(freqSevData$yvarsec), na.rm = TRUE)
sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
geom_col(aes_string(y = yvar, fill = groupvar), position = "dodge") +
geom_line(aes_string(y = as.numeric(yvarsec) * as.numeric(param)), color = groupvar) +
theme_pubclean()
}
которые возвращают сюжет без линии. Опять же, я считаю, что это связано с NSE и aes_string
.
без as.numeric
я получаю ошибку:
Ошибка в yvarse c * param: non-Numberri c аргумент бинарного оператора
Предлагаемое решение от @ linog
getSecPlot <- function(data, xvar, yvar, yvarsec, groupvar, ...){
df[,"param"] <- max(as.numeric(data[, yvar]), na.rm = TRUE)/max(as.numeric(data[, yvarsec]), na.rm = TRUE)
df[,"param"] <- df[,"param"]* df[, yvarsec]
sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
geom_col(aes_string(y = yvar, fill = groupvar), position = "dodge") +
geom_line(aes_string(y = "param", color = groupvar)) +
theme_pubclean()
}
test <- getSecPlot(freqSevDataAge, xvar = get("agegroup"),
yvar = "severity", yvarsec = "frequency", groupvar = "gender")
test