Подтвердить что ты не робот

Где в R я постоянно храню свои пользовательские функции?

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

4b9b3361

Ответ 1

Да, создайте пакет. Существуют многочисленные руководства, а также руководство Написание R Расширений, которое поставляется с вашей копией R.

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

install.packages("devtools")
devtools::create("path/to/package/pkgname")

Ответ 5

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

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

  • Я не поклонник того, чтобы каждый раз "извещать" все; во-первых, он просто не работает с большими наборами данных и/или результатами прогона модели.

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

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