相关疑难解决方法(0)

R脚本行号错误?

如果我从命令行运行一个长R脚本(R --slave script.R),我怎么能让它给出错误的行号?

如果可能的话,我不想将调试命令添加到脚本中 - 我只是希望R的行为与大多数其他脚本语言一样......

debugging r

96
推荐指数
4
解决办法
3万
查看次数

你能让R打印更详细的错误信息吗?

我经常对R的神秘错误消息感到沮丧.我不是在交互式会话期间谈论,我的意思是当你运行脚本时.错误消息不会打印出行号,并且通常很难跟踪违规行以及错误原因(即使您可以找到该位置).

最近我的R脚本失败了,带来了令人难以置信的深刻信息:"执行停止了." 我通常跟踪这些错误的方法是在整个脚本中放入大量的打印语句 - 但这很痛苦.我有时不得不在交互式会话中逐行浏览脚本以查找错误.

有没有人有更好的解决方案,如何使R错误输出更有用?

编辑:许多R调试的东西适用于交互式会话.我正在寻找有关通过Rscript运行的命令行脚本的帮助.当错误发生时,我不在R会话的中间,我在bash shell.我无法运行"traceback()"

error-handling r

34
推荐指数
1
解决办法
1万
查看次数

调试lapply/sapply调用

使用lapply和朋友编写的代码通常在眼睛上更容易,而且比循环更容易Rish.我和下一个人一样喜欢lapply,但是当出现问题时如何调试呢?例如:

> ## a list composed of numeric elements 
> x <- as.list(-2:2)
> ## turn one of the elements into characters
> x[[2]] <- "what?!?"
> 
> ## using sapply
> sapply(x, function(x) 1/x)
Error in 1/x : non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)

我使用了for循环:

> y <- rep(NA, length(x))
> for (i in 1:length(x)) {
+     y[i] <-  1/x[[i]]
+ }
Error in 1/x[[i]] : non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)

但我会知道错误发生在哪里:

> i
[1] 2
Run Code Online (Sandbox Code Playgroud)

使用lapply/sapply时我该怎么办?

r

31
推荐指数
3
解决办法
5562
查看次数

你最喜欢的R调试技巧是什么?

可能重复:
调试R的一般建议?

我最近开始使用browser()函数定义进行调试(一个很棒的工具!).我觉得print()调试一直在减缓我内置调试工具的学习曲线.我失踪了的其他一些人是什么?

debugging r

30
推荐指数
0
解决办法
3587
查看次数

R语言的调试工具

可能重复:
调试R的一般建议?

在大约9个月前学习R之后,我终于通过print()每隔一行使用语句从调试开始.我现在是一个相当恒定的用户browser()debug().我最近意识到的一些新的工具:traceback(),trace(),和recover().

有人建议何时(以及如何)使用这些?

debugging r

19
推荐指数
0
解决办法
3163
查看次数

R相当于MATLAB的"如果错误就停止"

我正在尝试调试R程序,我非常缺乏stop if errormatlab 的功能.我已经阅读了R-debug-tools.pdf (镜像)文档,但它没有列出这样的内容.是否有任何方法可以指示R,当遇到任何错误时 - 即使我没有预料到并且计划使用自定义trace函数 - 它应该停止执行并让我进入browser()模式?

debugging r

17
推荐指数
2
解决办法
5184
查看次数

在R中发生错误后获取变量的状态

假设我刚刚调用了一个函数f,并且在函数的某处发生了错误.我只是希望能够在错误发生之前检查出不同变量的值.

假设我的直觉告诉我这是一个小错误,所以我懒得使用debug(f)而且懒得插入browser()功能的部分我认为出错了.而且我懒得开始print()发表声明.

这是一个例子:

x <- 1:5
y <- x + rnorm(length(x),0,1)
f <- function(x,y) {
  y <- c(y,1)
  lm(y~x)
}
Run Code Online (Sandbox Code Playgroud)

调用f(x,y)我们得到以下错误:

Error in model.frame.default(formula = y ~ x, drop.unused.levels = TRUE) : 
  variable lengths differ (found for 'x')
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想要在lm()调用之前获取环境的状态; 这样我可以打电话x,y看看他们的长度是不同的.(这个例子可能太简单了,但我希望它可以解决这个问题.)

debugging r

16
推荐指数
1
解决办法
2万
查看次数

警告消息行号R.

我有一个很大的for循环循环数百次,最后会产生这个警告:

Warning messages:
1: In min(j, na.rm = TRUE) :
  no non-missing arguments to min; returning Inf
Run Code Online (Sandbox Code Playgroud)

有什么办法我可以问R生成警告信息的哪一行?


OP的评论如下:"我不直接将min作为一条线.它可能嵌套在其他函数中,我不会问这个问题,因为我知道这是来自min的问题."

r

9
推荐指数
1
解决办法
2987
查看次数

强制包的功能使用用户提供的功能

我遇到了一个问题MNP,我跟踪了一个不幸的调用deparse(最大宽度限制为500个字符).

背景(如果你感到无聊,可轻松跳过)

因为mnp使用一些特殊的语法来允许变化的选择集(包含cbind(choiceA,choiceB,...)在公式定义中),我的公式调用的左侧在model.matrix.default调用deparse它时是1700个字符左右.由于deparse最多支持width.cutoff500个字符,因此该sapply(attr(t, "variables"), deparse, width.cutoff = 500)[-1L]model.matrix.default的第一个元素为:

[1] "cbind(plan1, plan2, plan3, plan4, plan5, plan6, plan7, plan8, plan9, plan10, plan11, plan12, plan13, plan14, plan15, plan16, plan17, plan18, plan19, plan20, plan21, plan22, plan23, plan24, plan25, plan26, plan27, plan28, plan29, plan30, plan31, plan32, plan33, plan34, plan35, plan36, plan37, plan38, plan39, plan40, plan41, plan42, plan43, plan44, plan45, plan46, plan47, plan48, plan49, plan50, plan51, …
Run Code Online (Sandbox Code Playgroud)

debugging r

7
推荐指数
1
解决办法
166
查看次数

R缺少哪些调试工具,其他语言有哪些?

我很熟悉browser(),trace(),traceback(),和options(error=recover).我也在玩调试包,看起来不错.所有这些都使R R领先于我在调试设施方面所使用的其他统计软件包.但与编译的传统语言相比,情况似乎不太有利.这引出了两个问题:

  1. 您最想念的其他语言的调试工具是什么?

  2. 是否可以在R中添加此功能,因为它存在于当前,还是需要编译器等?

编辑:消除了我提议的条目,因为有人指出它确实存在于R.

debugging r

6
推荐指数
1
解决办法
648
查看次数

标签 统计

r ×10

debugging ×7

error-handling ×1