Поиск того, что вам нужно в R: сфокусированный поиск в R и во всех (более 3500) CRAN-пакетах
-
06-07-2019 - |
Вопрос
Часто в R имеется дюжина функций, разбросанных по множеству пакетов - все они имеют одинаковое назначение, но, конечно, отличаются по точности, производительности, документации, теоретической строгости и т. д.
Как вы находите их - изнутри R и даже из пакетов CRAN, которые вы не установили?
Так, например: общая функция plot . Установить вторичные галочки гораздо проще, используя функцию снаружи базового пакета:
minor.tick(nx=n, ny=n, tick.ratio=n)
Конечно, plot находится в ядре R, но minor.tick нет, на самом деле он находится в Hmisc . Р>
Конечно, этого нет в документации по plot , и вы не должны этого ожидать. Р>
Другой пример: аргументы ввода данных в plot могут быть предоставлены объектом, возвращенным из функции hexbin , опять же, эта функция из библиотеки снаружи из R ядра.
Что было бы замечательно, так это программный способ собрать эти аргументы функций из различных библиотек и поместить их в одно пространство имен?
* edit: (пытаясь более четко изложить мой пример чуть выше :) аргументы для plot , предоставленные в ядре R, например, для установки частоты тиков оси, являются xaxp / yaxp; однако, можно также установить / t / f через функцию вне базового пакета, опять же, как в функции minor.tick из пакета Hmisc - но вы не узнаете об этом, просто взглянув на сигнатуру метода plot , Есть ли в R мета-функция для этого? *
Пока я сталкивался с ними, я собирал их вручную, каждый набор собирался в один TextMate сниппет (вместе с импортом сопутствующей библиотеки) , Это не так сложно и не занимает много времени, но я могу только обновить мой фрагмент, когда узнаю об этих дополнительных аргументах / параметрах. Есть ли канонический R способ сделать это или, по крайней мере, более простой способ?
На всякий случай неясно, я не говорю о случае, когда несколько пакетов предоставляют функции, направленные на одну и ту же статистику или представление (например, «boxplot» в базовом пакете; «boxplot.matrix» в gplots; и «bplots» в Rlab). Я имею в виду случай, когда имя функции одинаково для двух или более пакетов.
Решение
" sos " Пакет является отличным ресурсом. Его основным интерфейсом является " findFn " команда, которая принимает строку (ваш поисковый термин) и просматривает функцию " function " записей в поисковой базе данных сайта Джонатана Барона и возвращает записи, которые содержат искомый термин во фрейме данных (класса " findFn ").
Столбцы этого фрейма данных: Количество , MaxScore , TotalScore , Пакет , Функция , Дата , Оценка , Описание и Ссылка . Нажмите на ссылку "Ссылка". в строке любой записи сразу же откроется страница справки.
Пример: предположим, что вы хотите найти все фильтры свертки во всех 1800+ пакетах R. Р>
library(sos)
cf = findFn("convolve")
Этот запрос будет выглядеть как термин «свернуть», другими словами, он не обязательно должен быть именем функции. Р>
Вводить " cf " возвращает таблицу HTML всех найденных совпадений (в нашем случае 23). Эта таблица представляет собой HTML-рендеринг фрейма данных, о котором я упоминал выше. Что особенно удобно, так это то, что каждый столбец («Количество», «MaxScore» и т. Д.) Можно сортировать, нажимая на заголовок столбца, поэтому вы можете просматривать результаты по «Оценка», по «Имя пакета», и др. р>
(Кроме того: при выполнении этого точного запроса одним из результатов была функция "panel.tskernel" в пакете с именем "latticeExtra". Я не знал, что в этом пакете есть фильтры временных рядов, и я сомневаюсь, что открыл бы это иначе.
Другие советы
На ваш вопрос нелегко ответить. Нет ни одной определенной функции.
formals
- это функция, которая передает аргументы named функции и их значения по умолчанию в именованном списке, но вы всегда можете иметь переменные аргументы через . ..
и скрытые именованные аргументы со встроенной функцией hadArg
. Чтобы получить список тех, вы должны использовать getAnywhere, а затем отсканировать выражение для hasArg. Я не могу придумать автоматический способ сделать это самостоятельно. Это если функции скрытых аргументов не документированы.