在R中编辑函数并保存更改(matlab风格)?

在R中编辑函数并保存更改(matlab风格)?,r,R,我有一些R文件,其中包含我编写的函数。我对这些文件进行了源配置,以使函数可用。如果foo是我的函数,我键入: foo我认为这取决于运行R的GUI(以及操作系统)。就我个人而言,我对OSX中的R.app很满意,但对于许多常见的编辑器,比如TextWrangler或Scite,都有R插件。IIRC这些插件允许您从编辑器中执行“source”命令,这样保存编辑也将更新R-console环境中函数的版本。保存函数对象对您有用吗?如果是,请在已编辑的函数上使用save(),然后使用load()将其重新加载

我有一些R文件,其中包含我编写的函数。我对这些文件进行了源配置,以使函数可用。如果foo是我的函数,我键入:


foo我认为这取决于运行R的GUI(以及操作系统)。就我个人而言,我对OSX中的R.app很满意,但对于许多常见的编辑器,比如TextWrangler或Scite,都有R插件。IIRC这些插件允许您从编辑器中执行“source”命令,这样保存编辑也将更新R-console环境中函数的版本。

保存函数对象对您有用吗?如果是,请在已编辑的函数上使用
save()
,然后使用
load()
将其重新加载
edit()
fix()
正在处理已解析的R对象,而不是原始文件,因此重新解析它们将非常困难或痛苦

> 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
foo writeLines(“foo.txt”,foo) >writeLines(deparse(foo),“foo.txt”) >阅读行(“foo.txt”) [1] “功能(x)”“1:10”###不是想要的

正如@CarlWitthoft所说,您最好使用R可用的众多GUI和IDE中的一种。RStudio非常流行,用户友好,Emacs+ESS很难击败。

有趣的是,我从未想过您可以开发这样的功能。根据我的经验,一个功能强大的IDE对于这项任务来说非常方便。我打开了多个.R文件,并对它们进行了临时修改/保存/源代码生成。大多数时候我也是这样做的。但是,我在会话启动时获取了几个函数文件,这是我经常需要的函数。有时我不确定这些文件中有哪一个包含我想要编辑的函数,所以我在这些文件中搜索。在这些情况下,最好有一个类似Matlab的功能,通过调用类似edit(函数)的方式永久编辑此函数。请注意(除非禁用了
keep.source
),函数的源通常位于
“source”
属性中。我认为matlab序列化结果更容易,但我记得文件和函数之间存在1-1对应关系。@没错,但是如果您使用工具
edit()
fix()
更改R中的函数定义,您仍然需要从新函数对象转换为源代码(文本)。IIRC,以OP建议的方式编辑R中的函数不会更新
source
属性,除了可能会使其松动??我不确定“source”属性是什么意思?@user1237875我想知道@Charles是否表示
srcref
属性。不同意。RStudio有一个source on save选项,所以只要你的所有函数都在一个没有顶级R代码的文件中,编辑/保存周期就和修复/保存一样方便。我在Ubuntu Linux和MacOS X上使用vim和vim-R-plugin的组合。但是我如何加载函数的源文件呢,如果我不知道源的确切文件名?在shell(bash)中有一个命令
which commandname
,它为我提供了该命令的路径,例如/usr/bin/bash for
which bash
。R中是否有类似的东西,因此可以键入类似的内容:
edit('which foo')
并打开源文件?