2014-10-27 2 views
5

У меня есть R-скрипт, содержащий около 1400 строк. Я недавно начал получать следующее сообщение об ошибке. Я могу запустить сценарий, выделив и используя ctrl-R, но я не могу запустить сценарий в режиме отладки. Любые предложения о том, как найти ошибку?R: Ошибка в fBody [[i]] во время работы debugSource

> 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 (выражение, р).

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 
+1

Одним из способов поиска ошибки в RStudio является использование shift-ctrl-c для комментариев блоков кода для изоляции источника ошибки. Интересно, можно ли изменить исходный код для debugSource, чтобы напечатать номер строки, где была обнаружена ошибка. – user3969377

+0

Я думаю, что RStudio обычно показывает номера строк в сообщениях об ошибках. Если у вас возникли проблемы с поиском номера строки, вызывающего эту ошибку, вы можете использовать мой (новый) пакет 'tryCatchLog' (https://github.com/aryoda/tryCatchLog), который обогащает номера строк и даже может писать дамп для диск, чтобы разрешить посмертный анализ ошибки. –

ответ

8

Это студийный глюк R, а не ошибка в коде. Я решил это, закрыв проект R Studio (без сохранения рабочего пространства проекта), а затем снова его открыв.

0

Отказ от ответственности: Я полный новичок в R.

Я отладки кода, который я получил, в Rstudio. У меня такая же ошибка. Я очистил окружающую среду. Я прокомментировал все строки, но первый и постепенно раскоментировал большие части кода, пока я не остался с исходным кодом. Ошибка никогда не выскочила.

Это случилось со мной с двумя разными сценариями.

Итак, я не знаю причины ошибки, но у вас может быть обходной путь.

22

У меня также была эта проблема. Это было вызвано недействительными точками останова: это происходит, когда вы устанавливаете точку останова, а затем изменяете код, перемещая точку останова на комментарий или пустую строку, например.

Просто очистить все точки останова и повторный источник.

+0

это работает для рабочего стола и сервера – tjim

+2

Это лучший ответ, чем принятый IMO - я бы скорее сбросил точки останова, чем потерял сеанс. – knowah

+1

Это сработало для меня. Я согласен, что это должен быть принятый ответ. – JerryKur

Смежные вопросы