2012-04-02 3 views
1

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

Каков наилучший способ для этого? Любые ссылки будут оценены.

+0

Это кажется неприемлемо смутное запрос. Вы должны указать некоторые особенности вперед. –

+0

@ DWin Ну, я не уверен, как конкретно здесь помогут. Я хочу знать, как изменить основную функцию пакета без перезаписи всего пакета. –

+0

Как написано, я интерпретировал ваш вопрос, чтобы вы сами написали пакет. Как стало очевидно, это не так. –

ответ

2

Если вы считаете, изменения необходимы в остальном мире тоже:

  1. Связаться с сопровождающим (packageDescription ("pkgName") $ Maintainer)
  2. объяснить изменение и
  3. приложить патчи для кода и документации электронная почта?

Если только вы сами нужны изменения/хотите попробовать вокруг локально:

  • ? fix
  • смотри также ? assignInNamespace
  • получить источник (пакеты на CRAN должны быть FOSS, но лучше прочитайте лицензию), сделайте свой chagne & установить этот пакет локально.

  • , если вам нужно, чтобы вставить фрагмент кода (например, дополнительный выходной заявление): ? trace

+0

Спасибо за ваш ответ. Но я не думаю, что вы понимаете мой вопрос. Я не спрашиваю о процессе публикации измененного кода. Я хочу изменить существующий пакет и попробовать его до этого. –

+0

@ david, см. Пересмотренный ответ. – cbeleites

0

Это то, что я сделал.

  1. Создайте еще одну функцию, скопированную из основной функции данного пакета.
  2. Измените функцию так, как вы хотите.
  3. Если вам нужно использовать внутреннюю функцию пакета (или класса), используйте <package name>::: перед именем функции.
  4. Сделайте свой результат унаследованным от класса, который вы хотите.

Например, class(results) <- c("rpart","nnet")

+1

david, что близко к подходу 'fix' - только это' fix' присваивает результирующую функцию тому же имени, что и исходное. Оригинал затем маскируется вашей версией (и все еще доступен через 'pkgname :: function'). – cbeleites

+0

@cbeleites спасибо за комментарий. Хорошая вещь. –

+0

Давид, добро пожаловать – cbeleites

Смежные вопросы