Посты про R

Раскрашиваем R в терминале: пакет colorout



В последнее время мне часто приходится гонять R-скрипты на удалённом Linux-сервере. Большую часть работы я выполняю на домашней машине, но иногда приходится отлаживать скрипты прямо на сервере. В этом мне очень помогает пакет colorout, который умеет красиво раскрашивать R в терминале. Давайте взглянем на него чуть подробнее.

Читать дальше


Cairo — делаем графики гладкими



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

Читать дальше


Операторы +=, -= в R



Продолжаем писать полезные операторы для языка R. В большинстве современных языков есть операторы +=, -= и т.п., они делают синтаксис более лаконичным. А давайте и в R определим подобные операторы, чтобы вместо

x <- x + 3
y <- y - 2

мы могли бы писать:

x %+=% 3
y %-=% 2

Читать дальше


Функции в R



В R очень много разных полезных функций. И многие большие вещи можно сделать весьма быстро, написав очень мало кода. На официальном сайте есть замечательная шпаргалка на английском языке: R reference card. В сети есть несколько вольных урезанных переводов, но они не очень удобные. Ниже вашему вниманию представляется русифицированная модифицированная версия обзора основных функций R. Команды снабжены ссылками на online-мануал.

Читать дальше


R-ссылки



Английские полезные R-ресурсы

  • R-project — официальный сайт
  • CRAN — официальный репозиторий пакетов
  • Bioconductor — ещё один репозиторий пакетов
  • R graph gallery — графическая галерея R
  • Inside-R — замечательно R-сообщество
  • Full manual — полные оригинальные спецификации
  • R Cookbook — разные полезные R-сниппеты для решения типовых задач
  • Quick-R — краткий обзор языка
  • Try R — online-обучалка основам языка
  • R Wiki — небольшая вики про язык R
  • R Seek — поиск информации про R
  • R Journal — журнал про R
  • Google's R Style Guide — стандарты оформления R-кода от Google
  • R by example — подборка примеров использования R
  • R FAQ — официальный FAQ
  • Functional programming — учимся функциональному программированию на R
  • crantastic — ещё одно R-сообщество
  • omegahat — ещё один R-репозиторий
  • ProgrammingR.com — и ещё один полезный сайт
  • fractalswithr — фракталы на R

  Читать дальше


Множественное присваивание в R



R — мощный и лаконичный язык. С помощью коротких инструкций можно сделать очень многое. Но давайте сделаем R ещё лаконичнее.

Чего мне всегда не хватало в R — так это множественного присваивания. Из-за отсутствия этой возможности приходится иногда писать не совсем красивый код для получения результата функции, который должен распределиться по нескольким переменным:

x <- solve(matrix(c(2, 0, 0, 3), ncol=2), c(1, 1))
x1 <- x[1]
x2 <- x[2]

А вот было бы здорово если бы такие вещи можно было записывать в одну строчку, например так:

с(x1, x2) %=% solve(matrix(c(2, 0, 0, 3), ncol=2), c(1, 1))

Нет ничего проще!

Читать дальше


Progress bar в R



Давайте поговорим о долгих расчётах, ведь они не так редко встречаются в мире вычислений. Когда вы запускаете скрипт, который будет заведомо долго работать, то приятно смотреть на состояние прогресса. Эта информация поможет прикинуть время до конца вычислений («осталось ещё 30%, я успею выпить чашку кофе» ) или просигнализировать о бесконечном цикле (1438% выполнено, что-то пошло не так... ). Давайте научим наш скрипт сообщать пользователю о проценте выполненных работ.

Читать дальше


Rprofile — кастомизируем рабочее окружение



Давайте поговорим о задании окружения в R. Для этой цели имеется два волшебных файла:

  • Rprofile.site — глобальный файл настроек для всех сессий. Путь в Windows: c:\Program Files\R\R-x.y.z\etc\Rprofile.site, путь в Linux: /etc/R/Rprofile.site.
  • .Rprofile — локальный файл настроек для текущей сессии. Лежит в домашней директории пользователя.

Эти файлы строятся единообразно, в них можно задать глобальные настройки окружения и объявить две полезных функции:

  • .First <- function() { ... } — функция, которая запускается в начале R-сессии
  • .Last <- function() { ... } — функция, которая запускается в конце R-сессии

На Stackoverflow можно посмотреть какие .Rprofile-файлы используют люди. Взглянем, что же можно полезного сделать в таком файле на небольших примерах.

Читать дальше


Конкатенация строк в R



Давайте поговорим о конкатенации строк. Новички в R пытаются пробовать стандартную конструкцию

"a" + "b"

Но их постигает неудача — R так не работает. Оператор плюс — это арифметическая операция, её нельзя применять к строкам. В R полагается использовать функцию paste:

paste (..., sep = " ", collapse = NULL)
paste0(..., collapse = NULL)

Читать дальше


Вызов R-скрипта с аргументами из консоли



Для выполнения R-скрипта из консоли нам понадобится помощь утилит Rscript.exe и Rterm.exe. Разница между ними состоит в том, что Rscript.exe в результате выполнения выдаст нам только результат работы R-скрипта, а Rterm.exe выдаст полный лог R-сессии (включая стартовое приглашение к работе и все исполняемые команды). Если быть до конца честными, то Rscript.exe по сути вызывает Rterm.exe с специальными аргументами (об этом немного ниже). Рассмотрим пример запуска скрипта с аргументами командной строки:

Rterm.exe --no-restore --no-save --args 100 image <script.R >output.txt
Rscript.exe script.R 100 image >output.txt

Разберём эти команды чуть подробней.

Читать дальше


Рисуем комиксы в стиле xkcd



Многие слышали о таком замечательном комиксе, как xkcd. Это веб-комикс от Рэндела Манро о романтике, сарказме, математике и языке. Для некоторых комиксов есть переводы на русский. Для поиска и просмотра ваших любимых комиксов в R есть отдельный пакет: RXKCD. Давайте установим этот пакет и подключим его:

install.packages("RXKCD")
library("RXKCD")

Давайте поищем какой-нибудь комикс, а затем нарисуем его. Функция searchXKCD выдаст нам список всех комиксов, в описании которых встречается заданная фраза. А getXKCD выдаст нам полную информацию о комиксе по заданному номеру (включая рисование картинки).

searchXKCD("someone is wrong")
getXKCD(386)

А теперь помимо стандартных комиксов научимся рисовать свои!

Читать дальше