вторник, 18 августа 2015 г.

Что такое ядро языка? Карта изучения

Что такое ядро языка?

У современных языков программирования (Java, С#, Python, Ruby, PHP, JavaScript, С++, R) есть нечто общее. Это общее мы назовём ядром. Если овладеть ядром, то все языки будут учиться гораздо легче и быстрее. Вот картинка с составляющими ядра:
Для некоторых языков, некоторые части, изображенные на рисунке, могут отсутствовать или присутствовать. Например, в PHP нет понятия объявления функции, а есть только определение функции. Некоторые языки имеют реализацию дополнительных понятий, например, шаблоны в С++.

Изучение ядра - первый шаг к овладению R

Ядро языка это основа. Чтобы хорошо владеть чем-то нужна отличная основа, база, то на чём будет строиться всё остальное. Поэтому мы займёмся изучением ядра. Рисунок выше будет картой для последующих постов. Кстати, эту карту можно использовать и для изучения других языков.

вторник, 11 августа 2015 г.

Получение информации о среде

Функция sessionInfo выдаёт версию, ОС, настройки локали (англ. locale, языковые настройки), список включённых пакетов:
> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-unknown-linux-gnu (64-bit)
Running under: Arch Linux

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.2.1

Переменная R.version (тип list) содержит подробную информацию об ОС и версии:
> R.version
               _                           
platform       x86_64-unknown-linux-gnu    
arch           x86_64                      
os             linux-gnu                   
system         x86_64, linux-gnu           
status                                     
major          3                           
minor          2.1                         
year           2015                        
month          06                          
day            18                          
svn rev        68531                       
language       R                           
version.string R version 3.2.1 (2015-06-18)
nickname       World-Famous Astronaut    
Вместо R.version, можно использовать переменную version, разницы нет.
Переменная R.version.string (тип character) хранит строку с версией:
> R.version.string
[1] "R version 3.2.1 (2015-06-18)"

Только номер версии можно получить с помощью функции getRversion:
> getRversion()
[1] ‘3.2.1’

Работа с репозиториями пакетов

Получение списка репозиториев

Пакеты устанавливаются из репозиториев. Список репозиториев, используемых для скачки/установки пакетов, можно получить с помощью функции getOption:
getOption("repos")
Пример выполнения этой команды:
> getOption("repos")
                     CRAN
"http://cran.rstudio.com"
attr(,"RStudio")
[1] TRUE
Здесь, в результате выполнения, можно увидить название репозитория - CRAN и его адрес http://cran.rstudio.com.

вторник, 28 июля 2015 г.

Что нужно, чтобы начать применять R?

Вначале уточним цель

Вначале уточним, что весь следующий материал будет рассчитан на достижение цели: научиться применять R для решения своих задач. Чтобы добиться этой цели нужно:
  1. Узнать необходимый теоретический минимум
  2. Получить необходимый практический опыт, реализов теорию в практике
Все посты самоучителя это попытка дать этот необходимый теоретический минимум с практикой.

Что же нужно, чтобы начать применять R?

Чтобы начать применять R достаточно скачать и установить необходимые инструменты и начать пробовать ими пользоваться. Но что конкретно нужно делать? Как пользоваться? Этот и следующий посты объясняют это.

Пару соглашений о постах

Условимся, что для этого и следующих постов, в конце каждого, под заголовком "Смысл поста" будут выписаны самые важные идеи. Не для всех постов он будет, т.к. иногда не будет возможным вычленить эти идеи. Это нужно для удобства.

Текст под заголовком "В следующем посте" будет связывать по смыслу текущий пост со следующим и будет коротко описывать его суть.

Необходимая теория, начало: что такое программа?

Определимся, что значит программа. Программа это указание компьютеру, что нужно сделать, состоящее из последовательности шагов и которое записывается на языке программирования, в данном случае на R.

Главная цель программы - решить поставленную задачу. Какую конкретно задачу? Это выбирает сам программист: он решает что делать и в какой последовательности делать компьютеру и задаёт её в виде программы, на языке программирования. Компьютер просто покорно выполняет программу в точности как задал программист.

Язык программирования, в нашем случае R, это язык на котором общается программист (человек) с компьютером (машиной). На языке программирования описывается алгоритм, который компьютер должен будет выполнить.

Любая программа реализует какой-либо алгоритм. Алгоритм это план решения задачи. Т.е. получается, что программа это реализация плана решения задачи - алгоритма.

Смысл поста

Программа реализует алгоритм и решает поставленную задачу. Задачу определяет программист и пишет, что должен сделать компьютер на языке программирования.

В следующем посте

Итак, мы знаем, что такое программа, попробуем написать первую программу. Но для этого нам нужны инструменты, чтобы мы могли это сделать. Займёмся установкой инструментов в следующем посте.

четверг, 26 марта 2015 г.

Основы работы в консоли. Понятие выражения

Если запустить RStudio, курсор по умолчанию будет в панели консоли. В консоли удобно проводить исследования, связанные как с языком, так и с вычислениями, графиками. В ней (в консоли) можно писать маленькие программы и давать команды.

Принцип работы в консоли такой:
  1. мы пишем код и отдаём его на выполнение R, путём нажатия Enter
  2. R обрабатывает код и выдаёт результат
и так происходит постоянно, т.е. циклически (или в цикле, англ. loop). Такой режим работы называется интерактивным (от англ. interaction — «взаимодействие»). Поэтому иногда говорят, что работа в консоли ведётся в интерактивном режиме. Бывает вместо интерактивного режима говорят, что работа ведётся в REPL. REPL это сокращение от Read Eval Pring Loop - R читает команду (Read), выполняет её (Eval), выводит результат (Print) и процесс повторяется (Loop).

Дадим первую команду:
> 3.14
[1] 3.14
Это программа, состоящая из одного числа - числа pi с двумя цифрами после запятой. Мы просто ввели число, R выдал результат. Теперь на примере этой маленькой программы познакомимся c одним из главных принципов языка R.

Главный принцип: базовая (основная) конструкция R - выражение

В любом языке программирования есть базовая конструкция, с помощью которых реализуется алгоритм (как мы уже узнали алгоритм придумывает сам программист). Это может быть либо команда (statement), либо выражение (expression).

В R базовая конструкция это выражение (expression). Пример языков, где базовая конструкция это команда: C++, Java, Python, PHP. Разберёмся, что это значит. Но вначале уточним, один момент о командах.

То, что мы ввели в консоли это команда консоли, однако есть ещё и понятие команды как конструкции языка, которое по англ. называется statement. Нужно отличать эти два понятия, поэтому для команд как конструкций языка будем использовать слово-синоним - оператор (ещё один синоним это инструкция). Итак: команда языка это оператор (statement), команда консоли это просто команда консоли, другое понятие.

Самый главный принцип, который нужно понять и на котором всё строится: в R операторы (statements) и выражения (expressions) это одно и тоже: любой оператор это выражение. По-сути в R нет понятия команды как конструкции языка. Поэтому, то, что мы ввели - число 3.14, является выражением, которое состоит из одного числа, R вычислил его значение и выдал результат.

В чём отличие между операторами и выражениями? Отличие в том, что любое выражение всегда преоразуется в значение - результат, оператор - не преобразуется в результат.

На карте ядра были показаны операторы (синоним команд) как отдельный элемент:
Так как в R базовая конструкция это выражение, то картина будет другой:
Вообще все команды консоли это по-сути выражения, просто они называются командами консоли (и как было сказано выше это другое понятие, отличное от понятия оператора). Любая команда консоли имеет такой вид:
> выражение
[1] результат
Пока не будем рассматривать, что значит
[1]
, сделаем это позже, когда мы будем готовы к этому. Главное здесь понять, что все команды консоли имеют одинаковый вид.

Вот ещё несколько примеров выражений:
> 23
[1] 23

> 42 - 7
[1] 35

> 42 - 8
[1] 34

> 8 / 4
[1] 2

> sin(pi / 2)
[1] 1
Видно, что R может вычислять знакомые математические выражения. Вообще же консоль R можно использовать вместо калькулятора - консоль поддерживает всё то, что свойственно обычному калькулятору плюс умеет делать гораздо больше.

В консоли можно давать и несколько команд подряд, в одну строку, разделяя их символом-разделителем - точкой с запятой
;
:
> 23; 42 - 7; 8 / 4; sin(pi / 2)
[1] 23
[1] 35
[1] 2
[1] 1

Смысл поста

Работа в консоли ведётся в интерактивном режиме (aka REPL). В консоли даются команды, являющиеся по-сути выражениями (expressions). В R оператор (statement) и выражение (expression) это одно и тоже, понятие оператора не используется. Отличие выражения от оператора в том, что выражение всегда преобразуется в значение, а оператор - нет. Выражение это базовая конструкция языка R для выполнения действий алгоритма программы. Консоль R можно использовать вместо калькулятора.

В следующем посте

В этом посте мы познакомились с базовой конструкцией языка на котором будет строиться всё остальное - выражением. В следующем посте мы рассмотрим как вычисляются выражения и узнаем о простых и сложных выражениях.

суббота, 24 января 2015 г.

Решение типичных проблем и исправление ошибок

Ошибка: "package 'имя-пакета' is not available (for R version x.y.z)"

Ошибка может возникать при попытке установки пакета.

Может быть несколько причин и соответственно путей исправления этой ошибки:
  • Может исчерпаться свободное место, выделенное для файловой системы временной директории. В Линукс это /tmp, в Windows это обычно C:\Users\Имя\AppData\Local\Temp или путь, хранящийся в переменной среды %Temp%. Нужно убедиться что есть место для раздела. В Linux это можно сделать, например, так:
    df -h
    
  • Другая причина связана с настройкой репозитория:
    1. может быть выставлен либо некорректный URI репозитория;
    2. пакет может отстутствовать в репозитории;
    3. репозиторий может хранить устаревшую версию пакета.
    Для решения можно попробовать сменить репозиторий:
    options(repos = c(CRAN = "http://cran.rstudio.com"))
    install.packages('имя-пакета')
    
    # более короткая версия, не меняющая опций:
    install.packages("имя-пакета", repos=c(CRAN="http://cran.rstudio.com"))
    
    Здесь мы использовали новый URI для репозитория - http://cran.rstudio.com, список других адресов можно на странице CRAN Mirrors.

    Насколько актуальны зеркала можно узнать на странице the status of CRAN mirrors.

понедельник, 15 декабря 2014 г.

Работа с R онлайн (без установки)

Кроме работы с R на локальном компе, простые исследования можно проводить и в браузере, с помощью интерфейса, предоставляемого сайтом R-Fiddle (fiddle по-англ. скрипка), см. рисунок:
Интерфейс состоит из двух панелей: внизу находится панель, аналогичная панели консоли, а вверху панель, аналогичная панели редактора кода в RStudio.

Верхняя панель работает в режиме редактора. В правом углу верхней панели находятся две кнопки Graphs (графики) и Run Code (запустить код). По кнопке Graphs в правом верхнем углу открывается окошко, куда будут выводиться графики. Чтобы вывести график нужно дать соответствующую команду, например, вызвать функцию plot (как работать с графикой в R мы рассмотрим позже). По кнопке Run Code запускается код, которые был введён в верхней панели.

В нижней панели можно давать команды и тут же получать результат, т.е. работать в интерактивном режиме, подобно тому как это делается в RStudio.

суббота, 20 сентября 2014 г.

О самоучителе "Система программирования R"

О самоучителе

Этот самоучитель для тех, кто хочет научиться решать свои задачи, используя для этого компьютер, а конкретно систему программирования R.

Система программирования R это язык программирования R плюс набор программ с помощью которых мы будем писать код и проводить исследования. Однако система не ограничивается этим - система это ещё и соответствующее знание, приобрести которое, можно, проработав самоучитель.

Самоучитель рекомендуется читать с начала, последовательно, пост за постом, пробовать приведённые в постах примеры, на своей машине, изменять их, писать свой код, тогда вы сможете понять о чём идёт речь ;)

Посты самоучителя это не пересказ доступных источников и не попытка описать все возможности системы программирования R, а попытка передать саму суть, главный смысл, лежащий в основе. Поняв основу, можно будет легко разобраться в деталях уже самому, так как появятся базовые знания.

Одна из целей самоучителя дать всю информацию в максимально полезной для практики форме, т.е. нацеленность на практику. Отличие практика от теоретика можно увидеть на следующем рисунке:

Авторские права

Весь текст учебника является собственностью автора. Он защищён лицензией Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Понятным языком условия этой лицензии описаны на английском здесь.

Некоторые картинки (рисунки) были созданы автором самоучителя, некоторые брались из разных источников. В большинстве случаев автора картинки, установить не удавалось, так как картинки, размещённые на одном сайте, репостятся на других сайтах. Если вы являетесь автором, просьба об этом написать в комментариях к соответствующему посту.

Creative Commons License
Учебник по R is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License

вторник, 5 августа 2014 г.

Работа с пакетами

Установка и подключение пакета для использования

Чтобы начать пользоваться пакетом нужно выполнить два шага:
  1. Установить пакет с помощью функции install.packages
  2. Подключить пакет с помощью функции library
Рассмотрим как это делается на примере пакета ggplot2, который предоставляет функции для работы c графиками.

Шаг 1. Установка пакета

При установке пакета, система вначале скачивает пакет, потом устанавливает. Установим пакет ggplot2:
install.packages("ggplot2")
После запуска этой команды система установит не только ggplot2, но и все пакеты от которых он зависит.

Шаг 2. Подключение пакета

Мы узнали как скачать пакет, но как теперь его подключить, ведь без этого не будет возможным воспользоваться ни одной функцией пакета? Это можно сделать с помощью функции library:
library(имя_пакета)
Пример подключения пакета ggplot и использования его функции qplot:
> library(ggplot2)
# Убедимся, что теперь мы можем вызывать функции пакета
> qplot(carat, price, data = diamonds)

Установка пакета с определённого репозитория

Иногда бывает нужно установить пакет с определённого репозитория. Это можно сделать с помощью всё той же функции - install.packages, только вторым аргументом нужно передать адрес (URI) репозитория:
install.packages(name, repos = uri)
Пример:
install.packages("rattle", repos = "http://rattle.togaware.com")

Получение списка функций пакета

После подключения пакета с помощью функции library, становятся доступными все функции, пакетом предоставляемые. Получить список функций по пакету можно так:
ls(paste0("package:", "имя_пакета"), all.names = TRUE)
ещё один способ:
library(help = "имя_пакета")

Получение справки, которая идёт с пакетом

Мы упоминали, что пакет может идти с сопроводительной документацией (справкой), получить её можно так:
help(package = "имя_пакета")

Удаление пакета

Удалить пакет можно так:
remove.packages("имя_пакета")

Получение списка пакетов

Каждый из пакетов может быть:
  1. не установлен - пакет не был установлен с помощью функции install.packages (об этой функции ниже). Получить список таких пакетов можно следующей командой:
    setdiff(row.names(available.packages()), .packages(all.available = TRUE))
    
  2. установлен, но не подключён - пакет был установлен с помощью функции install.packages, но не подключён с помощью функции library (об этой функции ниже). Получить список таких пакетов можно следующей командой:
    setdiff(.packages(all.available = TRUE), (.packages()))
    
  3. установлен и подключён - пакет был установлен с помощью функции install.packages и подключён с помощью функции library. Получить список таких пакетов можно следующей командой:
    (.packages())
    
На следующем рисунке, с помощью кругов Эйлера, показаны отношения между множествами пакетов:

Обновление всех пакетов

С течением времени авторы выкладывают в репозиторий новые версии пакетов. Таким образом получается, что текущие пакеты с течением времени могут устаревать. Обновить все устаревшие пакеты, для которых есть более свежие версии можно так:
update.packages()

Перед обновлением можно проверить, для каких пакетов доступны обновления:
old.packages()

Обновление одного пакета

???

Получение зависимостей пакета

Зависимости пакета можно узнать так:
  1. Зайти на страницу со списком пакетов, отсортированных по имени.
  2. Нажать в браузере Ctrl+F и найти пакет по имени (в данном случае ggplot2).
  3. Перейти по ссылке на страницу проекта и найти с помощью Ctrl+F напротив слова Depends зависимые пакеты, см. рис.:
Можно сделать тоже самое программно:
available.packages()["ggplot2", "Depends"]
[1] "R (>= 2.14), stats, methods"
И тот и другой вариант поиска зависимостей не даёт полный список зависимостей - для каждого пакета от которого зависит текущий нужно искать зависимости.

Поиск пакета

На сайте CRAN можно найти страницу с классификацией пакетов по задачам - CRAN Task Views.

четверг, 17 октября 2013 г.

Интеллект-карты. Установка XMind

В предыдущих постах мы уже использовали интеллект-карты. В этом посте мы рассмотрим чуть подробнее что это такое и как установить программу для создания интеллект-карт.

Что такое интеллект-карты?

Интеллект-карты (по англ. mind map) это способ визуализировать мысли, идеи. С помощью интеллект карт можно раскладывать любую проблему на составляющие (полезно помнить о принципе "Разделяй и влавствуй" - разбиение задачи выполняется до тех пор, пока все подзадачи не окажутся элементарными). Кроме этого, интеллект-карты можно использовать как планировщик, можно проводить мозговой штурм, выделять закономерности и т. д. Интеллект-карты просто нужны при обработке данных.

В состав RStudio не входит программы для работы с интеллект-картами, поэтому для этого нужно установить отдельную программу - XMind. Вот пример её интерфейса (скриншот был найден где-то в Сети):
Есть бесплатная и платная версия программы для разных ОС. Мы будем пользоваться бесплатной Portable версию, которую можно скачать отсюда. Архив содержит версии для Windows, Linux и Mac OS X.

Пример установки XMind в Windows

После скачки распакуем её в D:\Soft\XMind. В Windows для запуска XMind можно использовать вот такой файл xmind.bat:
@echo off
set cur_dir=%CD%
chdir /d D:\мой-путь\XMind\XMind_Windows\
start /b xmind.exe %*
chdir /d %cur_dir%

Пример установки XMind в Linux

Нужно распаковать архив в папку для программ, например в /opt/xmind. Для работы нужны только директории Commons, XMind_Linux_64bit (или XMind_Linux если ОС 32-разрядная), остальные можно удалить. Для запуска можно создать файл /usr/local/bin/xmind (/usr/local/bin должен быть в $PATH) и сделать его исполняемым:
echo "(cd /opt/xmind/XMind_Linux_64bit && ./XMind)" > /usr/local/bin/xmind && chmod +x /usr/local/bin/xmind

суббота, 12 октября 2013 г.

Сочетания клавиш RStudio

Ниже приведён краткий список основных клавиш, полный список можно найти в меню Help -> Keyboard Shortcuts.

Переход между панелями

  • Ctrl+1 - перейти в панель редактор кода
  • Ctrl+2 - перейти в панель консоли

Клавиши для панели консоли

  • после нескольких символов нажать Tab - дополнить текущую команду.
  • ↑ - вывести предыдущую команду в истории команд
  • ↓ - вывести следующую команду в истории команд
  • Ctrl+↑ - показать историю команд в всплывающем окне.
  • Ctrl+L - очистить консоль.
  • Ctrl+U - удалить все символы перед курсором.
  • Ctrl+K - удалить все символы после курсора.
  • Сtrl+D или Esc - удалить текущую строку.
  • Ctrl+← - перейти к предыдущему слову
  • Ctrl+→ - перейти к следующему слову
Удерживая Shift, можно выделять текст с помощью стрелок и клавиш Home и End.

Клавиши для панели редактора кода

  • Ctrl+S - сохранить текущий файл.
  • Ctrl+Shift+S - выполнить текущий код из редактора кода (эта комбинация действует и в других панелях).
  • Alt+Enter - выполнить текущую строку без перемещения курсора.

суббота, 5 октября 2013 г.

Знакомство с интерфейсом RStudio

Интерфейс RStudio

Окно RStudio разделено на 4 панели, у двух из этих панелей, есть вкладки, а именно у вспомогательных панелей, у всех панелей в правом верхнем углу есть по две кнопки сворачивания/разворачивания панели, следующий рисунок должен пояснить это:

Расположение панелей можно менять, можно перемещать вкладки между вспомогательными панелями, это через главное меню Tools -> Global Options -> Pane Layout.

Рассмотрим коротко назначение каждой из панелей.

Панель консоли (Console)

В панели консоли можно давать команды и сразу получать результат. Такой стиль работы называется работа в интерактивном режиме. Режим интерактивен потому, что происходит как бы диалог пользователя с системой R.

Панель редактора кода

В панели редактора кода можно вводить целые программы, работа здесь не особо отличается от работы в обычном текстовом редакторе. Можно в консоли пробовать куски кода и потом переносить в редактор. Можно наоборот фрагменты кода из редактора пробовать проиграть в консоли.

Вспомогательная панель 1

Здесь можно наблюдать за значениями переменных. Что такое переменные и как работать с этой панель мы рассмотрим позже.

Вспомогательная панель 2

Здесь можно работать с папками и файлами, справкой, графиками и пакетами. Обо всём этом мы узнаем подробнее позже.

пятница, 4 октября 2013 г.

Установка и первый запуск R

Программы на R пишутся в специальном, заточенном под программирование, редакторе, который обладает бОльшими, чем обычный редактор, возможностями. Вообще такие навороченные редакторы называются по англ. IDE (Integrated Development Environment), а по-русски просто средой, или более полно - средой программирования. Мы будем использовать в качестве IDE RStudio - её нужно будет скачать и установить. Кроме RStudio нужно будет скачать и установить саму программу R. Итого нам нужно установить:
  1. RStudio
  2. R
Ниже рассмотрим как это сделать в разных ОС. Хотя версии в примерах устарели, алгоритм установки не изменился: нужно просто использовать последние номера-версии.

Установка в Windows

Рассмотрим шаги по установке среды R (RStudio + R):
  1. Скачать RStudio (на момент написания это версия 0.97.551).
  2. Скачать R (на момент написания это Portable версия 3.0.2).
  3. Распаковать файл RStudio-0.97.551.zip в папку c:\Soft\RStudio (вместо c:\Soft можно использовать любую удобную вам папку).
  4. Установить R в папку c:\Soft\R (вместо c:\Soft можно использовать любую удобную вам папку).
  5. Сделать ярлык или bat-файл для запуска RStudio, он должен указывать на  c:\Soft\RStudio\bin\rstudio.exe
  6. Запустить RStudio, при первом запуске нужно указать путь к папке c:\Soft\R\App\R-Portable\bin.
  7. После этого можно проверить, что все работает как нужно, введя в окне Console (см. рисунок):
    help()
    
    Чтобы увидеть результат, нужно нажать Enter.

Установка в Red Hat/Fedora/CentOS

В процессе написания...

Установка в Debian/Ubuntu

В процессе написания...

Установка в Arch Linux

В процессе написания...

Любой Linux (компиляция из исходников)

fileName=$(curl -fsSL https://cran.rstudio.com/banner.shtml | egrep --color -o 'R-[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]\.tar\.gz' | head -1)
curl -fsSL https://cran.rstudio.com/src/base/R-3/$fileName
tar xzf $fileName
cd $(basename $fileName .tar.gz)
./configure --prefix=/opt/r
make
sudo make install

Установка в Mac OS X

В процессе написания...