06 октября 2012

Пакет sos: быстрый и эффективный поиск справочной информации по R



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

Одна из наиболее развитых поисковых систем по R - R Site Search - была создана проф. Джонатаном Бароном (Jonathan Baron) из Университета Пенсильвании. Система позволяет выполнять поиск по ключевым словам среди 1) Task Views (сгруппированные по научным областям краткие описания соответствующих R-пакетов), 2) стандартных справочных файлов функций, 3) т.н. "виньеток" (англ. vignette) - кратких описаний функционала того или иного пакета, с примерами (обычно виньетка представляет собой созданный в LaTeX документ в формате PDF). Поиск по базе данных R Site Search можно выполнять не только из браузера, но и непосредственно из среды R. Для этого был создан пакет sos (Graves et al. 2009), о котором и пойдет речь ниже.

Пакет sos легко установить при помощи следующей команды (Ваш компьютер должен быть при этом подключен к Internet):

install.packages("sos")

Основной "рабочей лошадкой" пакета является функция findFn(), которая служит для поиска необходимой пользователю информации среди справочных файлов R-функций, входящих в базу данных R Site Search. Функция findFn() имеет два основных аргумента:
  • string - текстовое выражение, соответствующее поисковой фразе. Заключается в кавычки (например, string = "spline"). Если требуется выполнить поиск по точному соответствию, поисковую фразу заключают еще и в фигурные скобки (например, string = {"mixed effects model"}).
  • maxPages - задает максимальное количество страниц с результатами поиска (из расчета, что каждая страница содержит 20 строк).
Функция findFn() возвращает объект класса findFn, который представляет собой таблицу (стандартную data frame) с упорядоченными по релевантности (столбец Score) результатами поиска. Наиболее интересными в этой таблице являются столбцы Package (пакет), Function (название справочного файла, описывающего соответствующую функцию), и Description and Link (описание и ссылка). Таблицу можно просмотреть в любом браузере при помощи функции print(), которая создает соответствующий html-файл. В качестве примера, выполним поиск пакетов и функций, позволяющих строить модели со смешанными эффектами:

library(sos)
results <- findFn(string = {"mixed effects model"}, maxPages = 5)
print(results)

На рисунке приведена часть таблицы, полученной в ходе этого поискового запроса:


В более компактном виде результаты поиска можно просмотреть прямо в R при помощи функции summary():

summary(results)

Call:
findFn(string = {
    "mixed effects model"
}, maxPages = 5)

Total number of matches: 990
Downloaded 95 links in 42 packages.

Packages with at least 3 matches using pattern
  'mixed+effects+model'
      Package Count MaxScore TotalScore       Date
1        lme4     7       42        199 2012-07-02
2  growcurves     6       23        138 2012-08-18
3        nlme     5       32        146 2012-07-02
4         sme     5       32        141 2012-09-27
5   lme4Eigen     4       41        121 2012-02-26
6      assist     4       29        107 2012-02-22
7      mixlow     4       24         93 2012-03-30
8     kinship     3       33         82 2012-02-22
9    GMMBoost     3       31         83 2012-03-30
10       blme     3       31         80 2012-02-22
11  DPpackage     3       27         79 2012-09-27
12     mixcat     3       27         76 2012-02-22
13       lmec     3       26         78 2012-02-22
14      coxme     3       26         74 2012-05-31
15 pedigreemm     3       26         74 2012-02-22


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

results[results$Package == "lme4", "Function"]

[1] "00Index"          "glmer"            "mer-class"      
[4] "nlmer"            "densityplot.thpr" "lmer"           
[7] "getME"

Проблема решена всего за пару минут - название подходящего пакета  и имена нужных функций найдены!

Подробнее о возможностях пакета sos можно почитать в статье Graves et al. (2009), опубликованной в журнале The R Journal.


Комментариев нет :

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