Создание цикла в r для нескольких участков
Я разработал эксперимент, чтобы увидеть, как сывороточные маркеры меняются со временем после еды. У меня есть фрейм данных, состоящий из 72 наблюдений и 23о переменных, это называется BreakfastM.
Есть 229 переменных, которые являются маркерами сыворотки и 1, которая является моментом времени. Наблюдения разных образцов
Я ищу тенденции в данных о том, как сывороточные маркеры (то есть холестрол) меняются с течением времени. Я создал коробочную диаграмму, которая хорошо показывает тенденции в конкретном сывороточном маркере по отношению ко времени
Это код, который я использовал
boxplot((BreakfastM$Variable~BreakfastM$Timepoint))
Есть ли быстрый способ проверить все переменные в кадре данных по времени, написав код цикла в R?
2 ответа
Если вы просто ищете сюжет, переходите в длинную форму с tidyr
(а также dplyr
), а затем заговор с ggplot2
вероятно, лучшая отправная точка.
Если у вас есть только небольшое количество переменных, вы можете просто использовать facet_wrap
разделить боксы по мере. Поскольку вы не предоставили воспроизводимых данных, я использую mtcars
данные, подставляя "шестеренки" для вашей временной точки, и ограничиваясь только числовыми значениями для сравнения. select
выбирает столбцы, которые я хочу использовать, затем gather
преобразует их в длинный формат, прежде чем перейти к ggplot
mtcars %>%
select(gear, mpg, disp:qsec) %>%
gather(Measure, Value, -gear) %>%
ggplot(aes(x = factor(gear)
, y = Value)) +
geom_boxplot() +
facet_wrap(~Measure
, scales = "free_y")
Теперь, с 229 переменными, это не будет читаемым сюжетом. Вместо этого вы можете посмотреть на facet_multiple
от ggplus
который распространяется гранями на нескольких страницах. Здесь я использую его, чтобы разместить по одной на "страницу", которую вы можете просмотреть в программе просмотра или сохранить в зависимости от ваших потребностей.
Сначала сохраните базовый график (без фасетирования):
basePlot <-
mtcars %>%
select(gear, mpg, disp:qsec) %>%
gather(Measure, Value, -gear) %>%
ggplot(aes(x = factor(gear)
, y = Value)) +
geom_boxplot()
Затем используйте его в качестве аргумента facet_multiple
:
facet_multiple(basePlot, "Measure"
, nrow = 1
, ncol = 1
, scales = "free_y")
Создает те же панели, что и выше, но по одной на страницу nrow
а также ncol
может увеличить количество граней, показанных на странице).
Вы также можете использовать цикл для записи множества графиков в файлы изображений в вашем рабочем каталоге. Давайте создадим матрицу из 10 столбцов, представляющую 10 измеренных переменных, каждая из которых разделена на 3 факторных уровня:
data <- matrix(rnorm(150), nrow=15)
grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5)))
Цикл записывает каждый boxplot в файлы, называемые var_1.png
, var_2.png
и т.д. Это будет ставить 10 png
в вашем рабочем каталоге.
for (i in 1:ncol(data)) {
png(file = paste("var_", i, ".png", sep=""))
boxplot(data[, i] ~ grps)
dev.off()
}
Файлы очень маленькие, и вы можете быстро пролистывать их с помощью простого средства просмотра изображений.