вторник, 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.