Я рекомендую прочитать о стандартных и нестандартных оценках и о том, как это работает с тидиверсом.Вот несколько ссылок
http://adv -r.had.co.nz / Functions.html # function-arguments
http://adv -r.had.co.nz/Computing-on-the-language.html
Я также нашел это полезным
https://rstudio -pubs-static.s3.amazonaws.com / 97970_465837f898094848b293e3988a1328c6.html
Кроме того, вам нужно привести пример, чтобы можно было воспроизвести вашу проблему.Вот данные, которые я создал.
df <- data.frame(label = rep(c("a","b","c"), 5),
x = rnorm(15),
y = rnorm(15),
x2 = rnorm(15, 10),
y2 = rnorm(15, 5))
Я сохранил большую часть вашего кода таким же и изменил только то, что нужно было изменить.
myboxplot2 <- function(mydata = df, myexposure, myoutcome){
bp <- ggplot(mydata, aes_(as.name(myexposure), as.name(myoutcome))) +
geom_boxplot()
print(bp)
}
myboxplot2(myexposure = "label", myoutcome = "y")
Поскольку aes()
использует нестандартную оценку, вам нужно использовать aes_()
.Опять же, прочитайте ссылки выше.
Здесь я получаю все столбцы, которые начинаются с x.Я предполагаю, что ваш код получает столбцы, которые вы хотите.
outcomes <- names(df)[grep("^x", names(df), ignore.case = TRUE)]
Здесь я перебираю то же самое, что и вы.Я только храню объект заговора все же.
allplots <- list()
for (i in seq_along(outcomes)){
allplots[[i]]<- myboxplot2(myexposure = "label", myoutcome = outcomes[i])$plot
}
allplots