【发布时间】:2012-02-02 22:55:42
【问题描述】:
我有一个 R 脚本,它接受命令行参数,第一行是:
#!/usr/bin/Rscript --slave
我想中断函数的执行(这样我就可以交互地使用此时已加载的数据变量来计算我需要编写的下一段代码)。我在有问题的函数中添加了这个:
browser()
但它被忽略了。一些搜索表明这可能是因为程序在非交互模式下运行。但是更多的搜索还没有找到我如何将脚本切换到非交互模式以便 browser() 可以工作。类似于browser_yes_I_really_mean_it() 函数。
附:如果可能的话,我想避免更改脚本的其余部分。我目前的方法是将准备数据所需的代码块复制并粘贴到交互式会话中;但是随着脚本变得越来越复杂,这变得越来越不合理。
更新:对于其他有相同问题的人,实际问题的答案似乎是不可能的。一旦你在非交互模式下启动 R,你就会投下骰子。因此,给出的答案是变通方法:要么破解代码(记得在之后解开它),要么重构以使调试更容易。 (此评论无意批评答案;建议的重构使代码更清晰。)
【问题讨论】:
-
中断一个非常复杂的函数?如果这些是几个函数,您可以按照 mdsumner 下面的建议进行操作,并将一堆脚本放在另一个脚本中。然后在每个合理的断点之后,将数据写入磁盘。
-
我认为你在这里试图违背基本逻辑。您的第一行意味着“无论脚本怎么说,不要互动”。这就是重点。改变那条线 - 有多难?
-
@reinierpost 谢谢,尽管对
Rscript --slave的解释似乎没有记录。手册页只是说--slave是为了让它安静。但是要改成什么呢?当我单独使用Rscript时,browser()确实会触发,但它会退出脚本,而不是给我一个交互式会话。 -
@DarrenCook,您可以将问题的标题更改为例如“调试通过 Rscript 运行的 R 脚本”并稍微调整您的问题。我不知道大家对编辑问题的看法是什么,结果发现焦点随着答案而改变。
-
@PaulHiemstra 我认为编辑问题很好,但就我个人而言,我喜欢失败的问题,并且 Google 会找到它们:知道无法完成的事情比知道可以做不同的事情更有用。 (因为在搜索时我不会搜索“something different”)
标签: r