В силу разных причин, поиск технической информации по 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"
[4] "nlmer" "densityplot.thpr" "lmer"
[7] "getME"
Проблема решена всего за пару минут - название подходящего пакета и имена нужных функций найдены!
Подробнее о возможностях пакета sos можно почитать в статье Graves et al. (2009), опубликованной в журнале The R Journal.
Отправить комментарий