Поиск того, что вам нужно в R: сфокусированный поиск в R и во всех (более 3500) CRAN-пакетах - PullRequest
5 голосов
/ 28 ноября 2009

Зачастую в R десятки функций разбросаны по множеству пакетов - все они имеют одинаковое назначение, но, конечно, отличаются по точности, производительности, документации, теоретической строгости и т. Д.

Как вы находите их - изнутри R и даже из пакетов CRAN, которые вы не установили?

Например: общая функция plot . Установить вторичные галочки гораздо проще, используя функцию вне базового пакета:

minor.tick(nx=n, ny=n, tick.ratio=n)

Конечно, сюжет в ядре 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). Я имею в виду случай, когда имя функции одинаково для двух или более пакетов.

Ответы [ 2 ]

5 голосов
/ 26 февраля 2010

Пакет " sos " является отличным ресурсом. Его основным интерфейсом является команда « findFn », которая принимает строку (ваш поисковый термин) и сканирует записи «функции» в поисковой базе данных сайта Джонатана Барона и возвращает записи, содержащие поисковый термин в фрейм данных (класса "findFn").

Столбцы этого фрейма данных: Количество , MaxScore , TotalScore , Пакет , Функция Дата , Оценка , Описание и Ссылка . Нажатие на «Ссылка» в строке любой записи немедленно откроет страницу справки.

Пример: предположим, что вы хотите найти все фильтры свертки во всех 1800+ пакетах R.

library(sos)
cf = findFn("convolve") 

Этот запрос будет выглядеть как термин «свернуть», другими словами, это не должно быть именем функции.

Ключ "cf" возвращает таблицу HTML всех найденных совпадений (в данном случае 23). Эта таблица представляет собой HTML-рендеринг фрейма данных, о котором я упоминал выше. Что особенно удобно, так это то, что каждый столбец («Count», «MaxScore» и т. Д.) Можно отсортировать, щелкнув заголовок столбца, чтобы можно было просмотреть результаты по «Score», «Package Name» и т. Д.

(В дополнение: при выполнении этого точного запроса одним из результатов была функция "panel.tskernel" в пакете с именем "latticeExtra". Я не знал, что в этом пакете есть фильтры временных рядов, и я сомневаюсь я бы открыл это иначе.

1 голос
/ 29 ноября 2009

На ваш вопрос нелегко ответить. Не существует одной определенной функции.

formals - это функция, которая дает именованные аргументы функции и их значения по умолчанию в именованном списке, но вы всегда можете иметь переменные аргументы через параметр ... и скрытые именованные аргументы со встроенными hadArg функция. Чтобы получить список тех, вы должны использовать getAnywhere, а затем отсканировать выражение для hasArg. Я не могу придумать автоматический способ сделать это самостоятельно. Это если функции скрытых аргументов не документированы.

...