调试littler / Rscripts

时间:2009-10-26 02:09:01

标签: debugging r

如何调试从命令行运行的Rscripts

我目前正在使用getopt包来传递命令行选项,当出现错误时我很难,我很难:

  1. 看看究竟出了什么问题;
  2. R中以交互方式进行调试(因为脚本需要命令行选项。)
  3. 有没有人有示例代码并愿意分享?

3 个答案:

答案 0 :(得分:6)

您可以使用--args将命令行参数传递到交互式shell中,然后将源代码('')传递给脚本。

$ R --args -v

R version 2.8.1 (2008-12-22)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> require(getopt)
Loading required package: getopt
> opt = getopt(c(
+ 'verbose', 'v', 2, "integer"
+ ));
> opt
$verbose
[1] 1
> source('my_script.R')

您现在可以使用旧的browser()函数进行调试。

答案 1 :(得分:3)

我要么使用老式的印刷语句,要么使用交互式分析。为此,我首先使用save()保存状态,然后将其加载到交互式会话中(我使用Emacs / ESS)。这允许在逐行的基础上使用脚本代码进行交互式工作。

但是我经常在以较小的脚本部署之前以交互模式编写/测试/调试代码。

答案 2 :(得分:3)

另一种选择是使用选项(错误)功能。这是一个简单的例子:

options(error = quote({dump.frames(to.file=TRUE); q()}))

您可以根据需要在错误情况下创建详尽的脚本,因此您应该只决定调试所需的信息。

否则,如果您关注的是特定区域(例如连接到数据库),请将它们包装在tryCatch()函数中。