Встроить функцию fix () в скрипт .R? - PullRequest
2 голосов
/ 28 октября 2010

Я ищу способ встроить функцию fix () в скрипт.Вот что я сейчас делаю:

  1. Я загружаю определенный пакет.Например, library(PerformanceAnalytics)
  2. Я вызываю функцию fix() для редактирования пары функций в загруженном пакете.Пример, fix(VaR).
  3. Затем, используя встроенный редактор R., я копирую и вставляю свою функцию поверх функции, изначально загруженной из пакета.* скрипт, который вызывает вышеуказанные функции, которые я исправил, и выполняет необходимые мне вычисления.

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

Есть ли способ сделать это?

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

Ответы [ 3 ]

3 голосов
/ 28 октября 2010

Может быть source ваши функции, а затем использовать assignInNamespace?


РЕДАКТИРОВАТЬ # 1:
Выше не будет работать, потому что assignInNamespace не изменяет объекты, которые были экспортированы. Вместо этого

  1. поместите ваши функции в файл (foo.R)
  2. загрузить пакет
  3. , затем source(foo.R) или sys.source(foo.R, envir=attach(NULL, name="myenv"))

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


РЕДАКТИРОВАТЬ # 2:
Я не осознавал, что VaR вызывал неэкспортированные функции в пространстве имен. Вот почему EDIT # 1 не работает. Чтобы заставить его работать, вам необходимо явно сослаться на все неэкспортированные функции PerformanceAnalytics, используемые в VaR (например, изменить VaR.Gaussian на PerformanceAnalytics:::VaR.Gaussian).

См. этот пост на R-devel для пары других подходов. Я не смог быстро заставить работать решение профессора Рипли (я получаю ту же ошибку, что и в EDIT # 1), и я не пробовал решение Габора.

2 голосов
/ 28 октября 2010

Вы можете редактировать тело напрямую, обсуждается здесь:

Какие есть способы редактирования функции в R?

0 голосов
/ 28 октября 2010

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

Вы даже можете изменить имя пакета в файле DESCRIPTION ... назовите его "PerformanceAnalytics2", тогда в R вы просто library(PerformanceAnalytics2) и будете использовать его так же, как и в оригинальном пакете.

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