我有一个大约1400行的R脚本。我最近开始收到以下错误消息。我可以通过突出显示并使用ctrl-R来运行脚本,但是我无法在调试模式下运行脚本。有关如何找到错误的任何建议?
> debugSource('~/working/R/h60_maintenance/do_mega_analysis.R')
Error in fBody[[i]] : subscript out of bounds
> options(error=recover)
> debugSource('~/working/R/h60_maintenance/do_mega_analysis.R')
Error in fBody[[i]] : subscript out of bounds
Enter a frame number, or 0 to exit
1: debugSource("~/working/R/h60_maintenance/do_mega_analysis.R")
2: (function (fileName, encoding, breaklines)
{
env <- new.env(parent = emptyenv())
env$fun <-
3: suppressWarnings(.rs.setFunctionBreakpoints("fun", env, lapply(steps, function(step) {
step$at
}
4: withCallingHandlers(expr, warning = function(w) invokeRestart("muffleWarning"))
5: .rs.setFunctionBreakpoints("fun", env, lapply(steps, function(step) {
step$at
}))
6: suppressMessages(trace(what = functionName, where = envir, at = lapply(strsplit(as.character(steps
7: withCallingHandlers(expr, message = function(c) invokeRestart("muffleMessage"))
8: trace(what = functionName, where = envir, at = lapply(strsplit(as.character(steps), ","), as.numer
9: eval.parent(call)
10: eval(expr, p)
11: eval(expr, envir, enclos)
12: methods::.TraceWithMethods(what = functionName, where = <environment>, at = lapply(strsplit(as.cha
13: new(traceClass, def = if (doEdit) def else original, tracer = tracer, exit = exit, at = at, print
14: initialize(value, ...)
15: initialize(value, ...)
16: .initTraceable(.Object, ...)
17: .makeTracedFunction(def, tracer, exit, at, print, doEdit)
错误可能与以下行有关,因为这些行与选项10相关联:eval(expr,p)。
imds_rollup <- imds_detail_dt[,{
## if there's just one row in the group of ID's, return nothing
list(
count_every_fault = .N,
max_ci_value = max(CI.Value),
max_rotor_turn_time_air_sec = max(Rotor.Turn.Time...In.Air..s.),
max_rotor_turn_time_ground_sec = max(Rotor.Turn.Time...On.Ground..s.)
)}, by = c("BUNO","fileEventIndex")]
setkeyv(imds_rollup,c("BUNO","fileEventIndex"))
imds_rollup$max_ci_value <- NULL # max_ci_value has all NA
答案 0 :(得分:33)
我也有这个问题。它是由无效断点引起的:当您设置断点,然后修改将断点移动到注释或空行的代码时会发生这种情况。
只需清除所有断点并重新获取。
答案 1 :(得分:11)
这是R工作室的故障,而不是代码中的错误。我通过关闭我的R Studio项目(不保存项目工作区)然后重新打开它来解决它。
答案 2 :(得分:0)
免责声明:我是R的完全新手。
我正在调试我在Rstudio中收到的代码。我得到了同样的错误。 我清理了环境。我评论了所有行,但第一个,并逐渐取消注释代码的较大部分,直到我留下原始代码。错误永远不会出现。
这发生在我身上有两个不同的脚本。
所以,我不知道错误的原因,但你可能有一个解决方法。
答案 3 :(得分:0)
我已经吃过两次了。
另一次重启 RStudio 修复了它。
另外一次是由于某种原因断点被分配到一个空行,在那里似乎不可能放置断点。似乎有时可能会出现一些故障。在这种情况下,有帮助的是删除违规断点。