Создание цикла boxplot с ggplot2 только для определенных переменных - PullRequest
0 голосов
/ 30 мая 2018

У меня есть набор данных с 99 наблюдениями, и мне нужно создать коробочные диаграммы для тех, у кого есть конкретная строка.Однако, когда я запускаю этот код, я получаю 57 точно таких же графиков из исходной функции вместо цикла.Мне было интересно, как предотвратить перезапись графиков, но все же создать все 57. Вот код и изображение графика.Спасибо!

Формат Boxplot

    #starting boxplot function
     myboxplot <- function(mydata=ivf_dataset, myexposure = 
     "ART_CURRENT", myoutcome = "MEG3_DMR_mean")
     {bp <- ggplot(ivf_dataset, aes(ART_CURRENT, MEG3_DMR_mean)) 
     bp <- bp + geom_boxplot(aes(group =ART_CURRENT))
     }

     #pulling out variables needed for plots
     outcomes = names(ivf_dataset)[grep("_DMR_", names(ivf_dataset), 
     ignore.case = T)]

     #creating loop for 57 boxplots
     allplots <- list()
     for (i in seq_along(outcomes))
     {
     allplots[[i]]<- myboxplot (myexposure = "ART_CURRENT", myoutcome = 
     outcomes[i])  
     }
     allplots

1 Ответ

0 голосов
/ 30 мая 2018

Я рекомендую прочитать о стандартных и нестандартных оценках и о том, как это работает с тидиверсом.Вот несколько ссылок

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...