Просмотреть исходный код в R

Как просмотреть исходный код в R? Например, для функции portfolio.optim

> require(tseries)
> portfolio.optim
function (x, ...) 
UseMethod("portfolio.optim")
<environment: namespace:tseries>

> methods(portfolio.optim)
[1] portfolio.optim.default* portfolio.optim.ts*     

Non-visible functions are asterisked
> portfolio.optim.ts
Error: object 'portfolio.optim.ts' not found
> portfolio.optim.default
Error: object 'portfolio.optim.default' not found

Когда я устанавливаю R-пакет локально, он также загружает исходный код? Где он хранится на компьютере? Кто-нибудь знает?

Ответ 1

  • В ответ на Non-visible functions are asterisked это означает, что фактические функции, отправленные на ts или объекты по умолчанию, соответственно, находятся в пространстве имен tseries, но не экспортируются. Поэтому просто введите tseries:::portfolio.optim.default и вы увидите код функции после того, как вы укажете полный патч, включая пространство имен.

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

Ответ 2

Функция getAnywhere полезна, когда вы не знаете, в каком пространстве имен есть функция.

Описан в manual или на странице справки .

Ответ 3

Что вы можете сделать для большинства функций, введите edit (functionname) в командное окно в R. Где вы заполняете имя функции именем.

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

Ответ 4

Если то, что вы хотите просмотреть, является источником для определенного метода, у вас есть несколько вариантов. Один из них - использовать debug (portfolio.optim). Затем, когда вы запускаете функцию на объекте, она должна идти шаг за шагом через метод, распечатывая код по мере его появления. Используйте 'n', чтобы заставить его пройти, и не забудьте использовать undebug (portfolio.optim), когда вы закончите.

В качестве альтернативы вы можете загрузить исходный код необходимого вам пакета, разархивировать его и искать файлы с многообещающими именами (этот подход затруднен, так как функция, которую вы ищете, может быть написана на C!). Это проще, чем поиск кода в двоичном формате. Если вы идете по этому маршруту, код должен быть доступен только в сжатой папке, где вы загружались.