【发布时间】:2020-04-15 18:17:13
【问题描述】:
我有一个情节,我重复了很多次,只是用不同的变量,所以我想把它变成一个函数:
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
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 我得到一个错误:
yvarsec * 参数中的错误:二进制运算符的非数字参数
@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
【问题讨论】: