Где в R я постоянно храню свои пользовательские функции? - PullRequest
28 голосов
/ 08 июля 2010

У меня есть несколько пользовательских функций, которые я часто использую в R. Вместо того, чтобы использовать этот файл (или его части) в каждом скрипте, есть ли способ добавить его в базовый R-файл, чтобы они всегда были доступны при использованииR

Ответы [ 5 ]

22 голосов
/ 08 июля 2010

Да, создать пакет.Существует множество учебных пособий, а также руководство Writing R Extensions , прилагаемое к вашей копии R .

Поначалу это может показаться слишком большой работой, но вы, вероятно, будете рады, что вы сделали это в долгосрочной перспективе.

PS И затем вы можете загрузить этот пакет из ~/.Rprofile.Для действительно короткого кода вы также можете определить его там.

17 голосов
/ 10 июля 2010

Пакет может быть излишним для нескольких полезных функций. Я бы сказал, что нет ничего плохого в том, чтобы явно source() использовать их по мере необходимости - по крайней мере, это явно, так что если вы отправите кому-нибудь свой код по электронной почте, вы не забудете включить эти другие сценарии.

9 голосов
/ 08 июля 2010

Другой вариант - использовать файл .Rprofile. Вы можете прочитать о деталях в ?Startup. По сути, идея такова:

... в текущем каталоге выполняется поиск файла с именем «.Rprofile» или в домашнем каталоге пользователя (в таком порядке). Файл профиля пользователя источник в рабочей области.

Вы можете прочитать здесь о том, сколько людей используют эту функцию.

2 голосов
/ 20 февраля 2016

Принятый ответ является лучшим долгосрочным: Создайте пакет.

К счастью, кривая обучения для этого была резко уменьшена пакетом devtools: он автоматизирует создание пакета (хороший помощник ввстать на ноги), поощряет передовой опыт (например, документирование с помощью roxygen2 и помогает использовать онлайн-контроль версий (bitbucket, github или др.), делится вашим пакетом с другими. Это также очень полезно для упрощения перехода в CRANподача.

Хорошие документы на http://adv -r.had.co.nz и http://r -pkgs.had.co.nz .

до создайте свой пакет , например, вы можете:

install.packages("devtools")
devtools::create("path/to/package/pkgname")
1 голос
/ 16 июля 2010

Вы также можете взглянуть на пакет 'mvbutils': он позволяет вам установить иерархический набор «задач» (папки с файлами рабочей области «.RData» в них), чтобы вы всегда могли видеть, что находится в наследственных задачахт.е. предки находятся в пути поиска ().Таким образом, вы можете поместить свои пользовательские функции в «стартовую задачу», где вы всегда запускаете R;а затем вы выбираете vwh для конкретной задачи проекта, которая вам требуется, чтобы вы могли избежать загроможденных рабочих пространств, но вы все равно сможете использовать (и редактировать) свои пользовательские функции, потому что начальная задача всегда является наследственной.Объекты (включая функции) сохраняются в файлах ".RData" и, таким образом, загружаются / сохраняются автоматически, но для функций существуют отдельные средства резервного копирования текста.

Существует множество различных способов работы в R, инет единого наилучшего решения.Также не легко найти обзор!Говоря только за себя:

  • Я не фанат необходимости «все время получать» все;во-первых, он просто не работает с большими наборами данных и / или результатами прогонов модели.

  • Я думаю, что пакеты сложны для создания и обслуживания;есть действительно значительные накладные расходы.После первых пяти пакетов, которые вы пишете, все становится немного легче, если вы делаете это по крайней мере еженедельно, чтобы вы не забыли как, но на самом деле ...

InНа самом деле, mvbutils также имеет набор инструментов для облегчения создания и (особенно) обслуживания пакетов, предназначенных для плавного взаимодействия с системой иерархии задач.Я использую и редактирую свои собственные пакеты все время (включая редактирование самого mvbutils);но если бы не инструменты из 'mvbutils', я бы расстроил зубы в большинство дней недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...