2010-08-14 2 views
25

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

> 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 пакет локально, это загрузить исходный код, а? Где он хранится на компьютере? Кто-нибудь знает?

+3

См. Также: Uwe Ligges, «Служба поддержки R: доступ к источникам» _R News_, 6 (4): 43-45, октябрь 2006 г. http://cran.r-project.org/doc/Rnews/Rnews_2006 -4.pdf –

ответ

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

  2. Независимо от того, загружается ли R источник или двоичный файл, зависит от вашей операционной системы. В любом случае источник для tseries package is available. Чтение исходного кода, написанного опытными кодировщиками, - хороший способ узнать.

+0

Я не могу показать исходный код функции 'lu' в пакете' Matrix'. Не могли бы вы взглянуть? – user236215

22

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

Описан в manual или на функции help page.

15

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

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

+0

Почему downvote? Я протестировал это, и он работает с библиотечной функцией. –

+0

Приводит красивое окно в RStudio. +1! –

5

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

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

+0

ничего себе. спасибо вам за эту функцию 'debug'. это здорово! –

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