Просмотреть исходный код в 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!). Это проще, чем поиск кода в двоичном формате. Если вы идете по этому маршруту, код должен быть доступен только в сжатой папке, где вы загружались.