Сохранение данных и экспорт графиков из среды R (Rgui)

Сохранение данных в RguiВ предыдущих двух статьях я написал о том, как загрузить и как отредактировать таблицу данных в Rgui. Завершающим этапом в любом статистическом анализе является сохранение результатов. Результаты можно сохранить в разном виде: начиная от электронных таблиц, и заканчивая рабочим пространством R (формат .RData). Также я расскажу о том, как сохранять алгоритм команд и экспортировать графики.


Сохранение таблиц данных

Как и в прошлых двух статьях, мы будем работать с таблицей физических данных студентов одного из вымышленных военных ВУЗов (скачать можно здесь: voenvuz_clean). В статье о редактировании данных в R мы изменили структуру и содержание таблицы, однако не сохранили результат. К счастью, я сохранил алгоритм команд, который позволит восстановить отредактированную таблицу данных. Для этого в меню откроем вкладку "Файл" и выберем опцию "Новый скрипт". В открывшееся скриптовое окно вставляем следующий текст:

### загружаем таблицу данных в R
 voenvuz <- read.table("voenvuz_clean.txt", sep = "\t", header = T)

### меняем типы данных таблицы
 voenvuz$Name <- as.character(voenvuz$Name)
 voenvuz$Height <- as.numeric(voenvuz$Height)
 voenvuz$Weight <- as.numeric(voenvuz$Weight)
 voenvuz$Blood.group <- as.factor(voenvuz$Blood.group)

### добавляем и удаляем элементы таблицы
 Ivan <- list("Ivan", 21, 175, 67, "2", "+")
 Oleg <- list("Oleg", 24, 189, 82, "1", "+")
 voenvuz <- rbind(voenvuz, Ivan, Oleg)
 ID <- c(1:22)
 voenvuz <- cbind(voenvuz, ID)
 voenvuz$ID <- as.character(voenvuz$ID)
 voenvuz$BMI <- voenvuz$Weight / (voenvuz$Height * 0.01)^2

 trash1 <- voenvuz[ , -7] # удалим раннее созданный столбец "ID"
 trash2 <- voenvuz[ -2, ] # удалим строку под номером 2 (данные Петра)
 trash3 <- voenvuz[ -c(1,2,3,4,5,6,7,8,9,10), ] # удалим первые десять строк
 trash4 <- voenvuz[ -c(1:10), ] # то же самое, только код короче
 rm(trash1, trash2, trash3, trash4)
 names(voenvuz)[6] <- "Rhesus"
 voenvuz[1, "Name"] <- "Vanya"

### сортировка и фильтрация данных
 voenvuz <- voenvuz[,c("Name", "ID", "Age", "Height", "Weight", "BMI", "Blood.group", "Rhesus")]
 voenvuz <- voenvuz[order(voenvuz$Name),] # сортировка по имени
 rownames(voenvuz) = c(1:length(voenvuz$ID)) # обновление номеров строк
 voenvuz

Теперь выделяем этот текст в скриптовом окне, и при помощи комбинации клавиш "Ctrl R" запускаем алгоритм команд в консоли. В конце Вы увидите результат обработки данных - таблицу "voenvuz" в консоли.

Сохранить таблицу в RПолученную таблицу данных можно сохранить в разных форматах: для некоторых из них необходимо подключить дополнительные пакеты, для других нет. Как и прежде, я рекомендую писать все команды сначала в скриптовое окно и лишь затем переводить в консоль. Чтобы сохранить таблицу в обычном текстовом формате .txt достаточно ввести команду:

write.table(voenvuz, file = "voenvuz_final.txt", sep = "\t") 

Некоторые мои знакомые предпочитают сохранять таблицу в .csv формате:

write.csv(voenvuz, file = "voenvuz_final.csv")

Для экспорта таблицы в файлы .xlsx следует сначала загрузить пакет "xlsx" и затем воспользоваться его функцией write.xlsx():

library(xlsx)
write.xlsx(voenvuz, file = "voenvuz_final.xlsx")

Также можно сохранять данные в форматах разных статистических программ, таких как SAS, SPSS или STATA, используя r-пакет "foreign".


Экспорт векторной и растровой графики из Rgui

Ключевым и интуитивно понятным средством отображения данных является их визуализация. Графическое отображение данных - одна из сильных сторон среды R, так как позволяет создавать качественную растровую (пиксельную) и векторную (основанную на математическом описании геометрических фигур) графику. О преимуществах, недостатках и применении растровой и векторной графики хорошо и просто написано здесь.

Создадим два графика, в одном будет гистограмма веса студентов из нашей таблицы, а в другом диаграмма "ящик с усами", в котором будет показано распределение веса в разных возрастных группах. Чтобы объединить эти два графика в одно графическое окно (или графический девайс), можно воспользоваться функцией par():

par(mfrow=c(1,2))
hist(voenvuz$Weight, col = "light green", 
    breaks = 4, main = "Вес студентов", xlab = "Вес (кг)")
boxplot(voenvuz$Weight~voenvuz$Age, col = "light blue", 
    main = "Вес в разных возрастных группах", 
    ylab = "Вес (кг)", xlab = "Возраст (год)")

Таким образом, мы получили два графика в одном окне; однако заголовок второго графика не поностью умещается. Решить эту проблему легко: растяните графическое окно так, чтобы текст графика не выходил за рамки окна. После этого, кликаем на графическое окно, в меню нажимаем вкладку "Файл", затем "Сохранить как" и выбираем нужный формат. Это самый простой метод сохранения изображения из среды R.

Сохранение графиков в Rgui

Не сохраняйте графики в формате .jpeg. В противном случае Вам не избежать пиксельного мусора вокруг элементов графика, что очень серьезно ухудшает качество картинки. Существуют и другие способы экспорта графиков из Rgui. Продемонстрирую пару из них:

# Пример 1
svg("example_1.svg")
hist(voenvuz$Weight, col = "light green", breaks = 4, 
    main = "Вес студентов", xlab = "Вес (кг)")
dev.off()

# Пример 2
X11 ()
hist(voenvuz$Weight, col = "light green", breaks = 4, 
    main = "Вес студентов", xlab = "Вес (кг)")
dev.copy(tiff ,filename="example_2.tif");
dev.off ();

В первом мы просто сохранили файл векторного формата (.svg) в рабочую папку, не посмотрев предварительно на график в Rgui. Во втором - сначала просмотрели, как он будет выглядеть, а потом сохранили в растровом формате (.tif). Я рекомендую сохранять при помощи кода только те графики, которые были построены вручную в R (об этом я расскажу в отдельной статье). Если же Вы использовали функции автоматического построения, такие как plot(), boxplot(), hist(), то пользуйтесь меню - проще, быстрее, удобнее.


Как сохранить результаты статистического анализа?

Поставим задачу: нам необходимо сохранить результаты регрессионного анализа. Допустим, мы хотим выяснить, завиcит ли вес студентов от роста? Создадим модель, сделаем ее описание и построим график:

a <- lm(voenvuz$Weight ~ voenvuz$Height)
summary(a)
plot(voenvuz$Weight ~ voenvuz$Height, 
    main = "Зависимость веса от роста",
    xlab = "Рост (см)", ylab = "Вес (кг)")
abline(a, col = "red")

В итоге у Вас должно появиться графическое отображение линейной модели на графике и описание результатов статистической модели в консоли. Мы видим, что вес статистически зависим от роста студентов: чем больше рост, тем больше вес (r² = 0.63, p < 0.001). Из описания мы можем извлечь интересующие нас параметры, такие как r², p-value, intercept и другие. Можно сказать, что мы сохранили результаты анализа...

Сохранение рабочего пространства

Но как поступить, если анализ идет в несколько этапов, занимает длительное количество времени, и мы знаем, что нам необходимо будет его продолжить в будущем? Неужели надо будет полностью перезапускать алгоритм, реализация которого может занять сутки или даже недели (как например с Байесовскими методами). В таких случаях стоит сохранить рабочее пространство R, то есть текущую сессию со всеми переменными в ней. Для этого кликаем на консоль, в меню выбираем вкладку "Файл", затем опцию "Сохранить рабочее пространство", и в формате .RData сохраняете новый файл. Вы можете поделиться этим файлом с Вашими коллегам или руководителем, что позволяет работать над проектом в команде.

Сохранить рабочее пространство RКогда вернетесь за работу, запустите Rgui, загрузите рабочее пространство и продолжайте анализ. Чтобы вспомнить, какие переменные находятся в загруженном пространстве, введите функцию ls().

Сохранение скрипта и истории команд

Почему я всегда рекомендую писать все команды в скриптовом окне и лишь потом переводить их в консоль? Потому что перед завершением работы в R, скрипт можно сохранить как текстовый файл. Другими словами, при необходимости Вам всегда будет легко повторить или изменить что-либо в анализе данных: просто отредактируйте скрипт и запустите его в R (как мы сделали в начале этой статьи). Сохранить скрипт не составляет никакого труда: кликаем на скриптовое окно, затем идем в меню, выбираем вкладку "Файл" и далее "Сохранить как...". Можно сохранить его в формате .r, но я предпочитаю обычный .txt.

Также Вы можете сохранить историю команд (я никогда ее не сохранял, но на всякий случай, расскажу как это сделать). Для этого кликаем на окно консоли, открываем в меню вкладу "Файл" и выбираем "Сохранить историю команд...".

Заключение

Эта статья была заключительной из серии "Введение в R". В первой статье я рассказал о том, что такое язык и среда R; во второй мы попробовали использовать R на практике. Последние три были посвящены загрузке, обработке и сохранению таблицы данных. Кроме того, мы научились экспортировать графики, и сохранять рабочее пространство среды, историю и алгоритм команд (скрипт). Таким образом, теперь Вы имеете достаточный багаж знаний для того, чтобы беспрепятственно начать свой собственный путь в R...

Дальнейшие статьи будут посвящены статистическим методам и пакетам: как общим, так и узкопрофильным, используемым в физиологии, генетике и эволюционной биологии.

P.S. Если возникли вопросы, задавайте их в комментариях, обязательно отвечу. Критика также приветствуется!

Комментарии: 5
  1. Байкен

    Круто все!!!

    1. Samoedd (Автор записи)
      https://samoedd.com

      Скоро новенькое про R опубликую :-)

  2. Ольга

    Спасибо большое, очень понятно объясняете)

    1. Samoedd (Автор записи)
      https://samoedd.com

      Вам спасибо за теплый отзыв:-)

  3. seoonly
    http://seoonly.ru

    Спасибо, полезно-)

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *