隐藏历史记录中的函数定义以便于调试

时间:2012-11-08 09:37:20

标签: r debugging ide rstudio

假设我们正在调试函数foo(),我们想要一次又一次地修改它并使用一些参数运行它 - foo(bar="Hello", baz="How are you?") - 以确保问题得到解决。

在修改foo()主体之后,我们运行函数定义的行 - 以修改函数 - 现在,我们必须搜索包含foo(bar="Hello", baz="How are you?")的行的历史记录查看修改后的foo()是否正常工作。 搜索历史记录也可以通过继续按“向上”键直到它到达函数定义之前,即上次运行foo(bar="Hello", baz="How are you?")时来替换。

另一种可能性是将foo(bar="Hello", baz="How are you?")保留在剪贴板中,每次我们修改foo()正文时,我们只需从剪贴板粘贴foo(bar="Hello", baz="How are you?")并运行它。

但是如果我们同时修改多个具有长体的函数,那么所有这些解决方案都很难。我教过的最好的可能性是隐藏历史中的函数定义 - 当我们使用本机R环境或使用像RStudio这样的IDE时。有没有可能这样做?有没有更好的解决方案?

1 个答案:

答案 0 :(得分:4)

您可以从文件中source()函数定义,而不是从IDE /编辑器“复制粘贴”(或以其他方式运行)功能代码块。如果您执行此操作(无论如何默认情况下),源代码将不会显示在R控制台中。大多数合理的编辑器都有一个键盘快捷键,可以通过source()将函数缓冲区/文件/窗口输入/加载到R中,而不是通过“粘贴” - 在Emacs + ESS上它是 C - c C - l 例如。

您可以使用合理的编辑器,如Emacs和ESS,它不会将从代码缓冲区发送的代码交错到R缓冲区,因此您不必从函数定义中返回键,而只需返回历史记录。

至少在Linux上你可以使用常用的 Ctrl + r ,然后开始输入你想要的函数调用的前几个字符,这将进行反向搜索对于您正在键入的内容,然后在 Enter 将运行该命令/行。