我希望有一個R函數,它允許我模擬R控制檯,不同之處在於表達式在與全局環境不同的環境中進行評估。 (我想在R中使用它作爲替代調試方法,它允許恢復調用函數的本地參數,然後通過將功能代碼逐步粘貼到仿真R控制檯中進行調試)。下面是一個使用解析和eval和做這項工作中途功能(模擬的控制檯按下Esc鍵時停止):在R /仿真R控制檯中解析多行表達式
my.console = function() {
while(TRUE) {
tryCatch({
expr.out <- capture.output(eval(parse(prompt=": ")))
if (length(expr.out)>0) {
cat(expr.out,"\n")
}
}, error = function(e) {
str = as.character(e)
message(str)
})
}
}
console.env = new.env(parent=globalenv())
console.env$hello = "Hello World"
environment(my.console) <- console.env
my.console()
一個然後可以在模擬控制檯,例如計算簡單表達式
: 5*5
[1] 25
: hello
[1] "Hello World"
問題是我無法解析多行代碼,當從我的腳本粘貼if語句的開始時,會拋出錯誤。
: if (TRUE) {
Error in parse(prompt = ": "): 2:0: unexpected end of input
R控制檯意識到更多代碼將在下一行中執行並將提示更改爲+。我想知道是否也有類似行爲的解析函數的變體。 到目前爲止,我唯一的想法是在錯誤消息中搜索子串「意外的輸入結束」,以及是否發現它繼續解析。但例如因爲一些R錯誤消息似乎取決於R運行的語言,所以我對這種方法並不滿意。有沒有人知道我該如何編寫一個更好的仿真R控制檯來解析多行R代碼?
感謝您的建議,但我的目標是爲調試提供一種替代方法,我在CRAN包restorepoint實現。封裝小插曲詳細描述了它,爲什麼我更喜歡它通過browser()設置的斷點。到目前爲止,該軟件包似乎與我的骯髒的解決方法一起工作......但如果在R中有一種更簡潔的方式來模擬解析多行表達式的自定義控制檯,那將會很不錯。 –