對於相關的問題,您實際上想向文檔的讀者顯示錯誤,我編寫了一個包裝函數,用於計算並保存針織文檔中的回溯,並替換顯示它的traceback()。這裏是代碼:
saveTraceback <- local({
savedTraceback <- NULL
saver <- function(e) {
calls <- sys.calls()
deparsed <- lapply(calls, deparse)
deparsed <- deparsed[-length(deparsed)+0:1] # leave off last 2
lastjunk <- max(grep("withCallingHandlers", deparsed))
deparsed <- deparsed[-seq_len(lastjunk)]
savedTraceback <<- deparsed
}
function(expr)
withCallingHandlers(expr, error = saver)
})
traceback <- function() {
base::traceback(environment(saveTraceback)$savedTraceback)
}
你會這樣使用它。不執行呢?首先顯示代碼:
<<mycode,eval=FALSE>>=
f <- function() stop("this is an error")
g <- function() f()
g()
@
然後在saveTraceback()
函數執行它,而不顯示:
<<echo=FALSE>>=
saveTraceback({
<<mycode>>
})
@
最後調用traceback()
,這將顯示一些像什麼 用戶將在看到控制檯。
聽起來像一個功能請求。我認爲Yihui確實注意到了SO,但我也認爲有可能有更好的方法將它置於眼前。 –