2014-10-27 28 views
5

Yaklaşık 1400 satıra sahip bir R komut dosyası var. Son zamanlarda aşağıdaki hata iletisini almaya başladım. Komut dosyasını ctrl-R'yi vurgulayarak ve kullanarak çalıştırabiliyorum, ancak komut dosyasını hata ayıklama modunda çalıştıramıyorum. Hatayı nasıl bulacağınıza dair herhangi bir öneriniz var mı? Eval (ifade, s): bu çizgiler seçenek 10 ile ilişkili olduğundan R: Hata ayıklama çalıştırılırken fBody [[i]] hatası

> 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) 

hata

aşağıdaki hatları ile ilişkili olabilir.

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'daki hatayı bulmanın bir yolu, hatanın kaynağını izole etmek için kod bloklarını yorumlamak için shift-ctrl-c komutunu kullanmaktır. DebugSource için kaynak kodunun, hatanın tespit edildiği satır numarasını yazdırmak için değiştirilip değiştirilemeyeceğini merak ediyorum. – user3969377

+0

Sanırım RStudio ayrıca satır numaralarını hata mesajlarında normal olarak gösteriyor. Hataya neden olan satır numarasını bulmakta sorun yaşıyorsanız, satır numaralarını zenginleştiren ve hatta bir çöplük yazabilen (yeni) "tryCatchLog" (https://github.com/aryoda/tryCatchLog) paketimi kullanabilirsiniz. hata sonrası mortem analizine izin veren disk. –

cevap

8

Kodunuzda bir hata değil, R stüdyo hatası var. R Studio projemi (proje çalışma alanını kaydetmeden) kapatarak ve sonra yeniden açarak çözdüm.

0

Yasal Uyarı: Ben Rstudio içinde alınan bir kod hata ayıklama edildi R.

için tam bir acemi değilim. Aynı hatayı aldım. Çevreyi temizledim. Orijinal kodla ayrılıncaya kadar tüm satırları yorumladım, ancak ilk ve aşamalı olarak kodun daha büyük bölümlerini inceledim. Hata asla atmadı.

Bu, iki farklı komut dosyası ile bana oldu.

Bu nedenle, hatanın nedenini bilmiyorum, ancak bunun için bir çözümünüz olabilir.

22

Bu problemi de yaşadım. Geçersiz kesme noktalarından kaynaklandı: Bu, bir kesme noktası belirlediğinizde ve ardından kesme noktasını hareket ettiren kodu örneğin bir yoruma veya boş bir satıra değiştirdiğinizde olur.

Sadece tüm kesme noktalarını temizleyin ve yeniden Kaynaklayın.

+0

bu, masaüstü ve sunucu için çalışır – tjim

+2

Bu, kabul edilen bir IMO'dan daha iyi bir yanıttır - oturumumu kaybetmek yerine kesme noktalarını sıfırlamayı tercih ederim. – knowah

+1

Bu benim için çalıştı. Kabul edilen cevap olması gerektiğine katılıyorum. – JerryKur

İlgili konular