2012-02-28 2 views
2

У меня есть некоторые R-файлы, содержащие функции, которые я написал. Я использую эти файлы для доступа к функциям. Если Foo моя функция, и я типа:Редактировать функцию в R и сохранить изменения (стиль matlab)?

foo <- edit(foo)

или

fix(foo)

я могу изменить функцию и сохранить его только для этой сессии. Как я могу сделать изменения постоянными, т. Е. Что они сохранены в исходном файле? Пока я ищу исходный файл, редактирую его, а затем ресурс, который иногда может раздражать. Я видел это в Matlab, что «edit (function)» сохраняет изменения в исходном файле функции.

благодаря

+0

Интересно, мне никогда не приходило в голову, что вы можете развивать такие функции. По моему опыту, для этой задачи очень удобна IDE. У меня открыто несколько файлов .R, и я изменяю/сохраняю/создаю их _ad libidum_. –

+0

Так я и делаю большую часть времени. Но я запускаю несколько функциональных файлов при запуске моей сессии - функции, которая мне нужна регулярно. Иногда я не уверен, что эти файлы содержат функцию, которую я хочу редактировать, поэтому я просматриваю эти файлы. В этих случаях было бы здорово иметь функциональность, подобную Matlab, для постоянной редактирования этой функции вызовом, например edit (function). –

ответ

3

Я думаю, это зависит от того, что GUI (и, следовательно, какая ОС) вы используете R в. Лично я доволен R.app в OSX, но есть R-плагины для многих общие редакторы, такие как TextWrangler или Scite. IIRC эти плагины позволяют вам выполнить команду «source» из редактора, чтобы сохранить ваши изменения также будет обновлять версию функции в вашей среде R-консоли.

+0

Я использую комбинацию vim и vim-r-plugin на Ubuntu Linux и MacOS X. Но как я могу загрузить исходный файл функции, если я не знаю точное имя файла источника? В оболочке (bash) есть команда 'which commandname', которая дает мне путь к команде, например./usr/bin/bash для 'which bash'. Есть ли что-то похожее на R, поэтому можно ввести что-то вроде: 'edit ('which foo')' и он открывает исходный файл? –

2

Будет ли сохраняться объект функции для вас? Если это так, используйте save() для отредактированной функции и load(), чтобы загрузить ее обратно. edit() и fix() работают с анализируемыми объектами R, а не исходные файлы, так что будет трудно или боль deparse их снова

> foo <- function(x) 1:10 
> writeLines("foo.txt", foo) 
> writeLines(deparse(foo), "foo.txt") 
> readLines("foo.txt") 
[1] "function (x) " "1:10" ## not what is wanted 

Как говорит @CarlWitthoft, вы могли бы быть лучше использовать один из многих GUI и IDE, доступные для R. RStudio, очень популярны и удобны в использовании, а Emacs + ESS трудно превзойти.

+0

Обратите внимание, что (если функция 'keep.source' не отключена), функции обычно будут иметь свой источник в атрибуте' 'source''. Я думаю, что Matlab проще сериализовать результат, но я помню, что между файлами и функциями было соответствие 1-1. – Charles

+0

@Charles right, но если вы измените определение функции внутри R, используя инструменты 'edit()' и 'fix()', вам все равно нужно перейти от нового объекта функции к исходному коду (текст). IIRC, редактируя функцию в R способами, предложенными OP, не обновляет атрибут 'source', кроме как, возможно, потерять его? –

+1

Атрибут 'source' обновляется (отмечен 2.12). – Charles

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