2010-09-06 125 views
6

我發現這post從一年前,我使用R version 2.11.1 (2010-05-31),但仍然收到沒有行號的錯誤消息。R腳本行號錯誤?

任何解決方案?

+0

我收到帶有行號的錯誤消息。你如何加載你的腳本? – Shane 2010-09-07 20:08:07

+0

@Shane我正在使用Rscript。你如何加載你的腳本? – 2010-09-07 20:25:32

+0

我正在使用Windows GUI中的source()。 – Shane 2010-09-08 03:01:18

回答

6

給出的答案仍然有效。從腳本中返回行號並不是那麼直截了當,但是R可以爲您提供更多關於錯誤發現位置的信息。

您可以使用錯誤選項保存信息的文件,例如:

options(error = quote({ 
    sink(file="error.txt"); 
    dump.frames(); 
    print(attr(last.dump,"error.message")); 
    traceback(); 
    sink(); 
    q()})) 

功能findLineNum()可以使用,如果你有地方提供的文件的名稱。如果有錯誤信息,你可以這樣做:

dump.frames() 
x <- attr(last.dump,"error.message") 
ll <- gsub("Error in (.*) : .*","\\1",x) 
lln <- findLineNum(srcfile,ll) 
+6

+1謝謝,這是一種令人失望的,它尚未在默認情況下在R實施。似乎對我來說是一個非常理想的功能。 – 2010-09-08 06:51:14

+0

如果錯誤出現在R腳本的頂層,這不起作用。 – 2015-01-02 17:58:49

0

在即將發佈的R 2.14,核心團隊正在朝着實現這一功能的進步。使用source(file=..., keep.file=TRUE)加載的腳本中的函數將包含一個屬性srcref,該屬性標識與存儲爲類srcfilecopy的對象的源文件的內存中副本中函數定義相對應的字符範圍。

這不會立即提供行級別的調試,但如果您願意弄髒自己的手,它可以讓您獲得近似的行數。而且,這是進步。