[英]Use apply function instead of apply for eval parse instead of loop
解釋我的用例很復雜,但我正在處理一個需要解析可能會引發一些錯誤的文本的項目。 我想使用tryCatch()
以便盡可能多的腳本可以運行並提醒用戶某些代碼失敗。 我可以為此使用循環,但我想知道為什么存在這種行為,以及是否有一個應用函數可以解決這個問題。
當我在這個解析的對象上運行循環或使用do.call()
時,我只得到預期的單個錯誤消息。 當我使用lapply()
我收到相同的錯誤消息,然后是分配的輸出。 我試過在lapply()
周圍拋出抑制函數,這顯然不起作用。 我得到了類似的sapply()
和map()
。 好奇是否有人可以向我解釋。
test_text <- parse(text = "x <- pi; y <- x; z <- stop()")
eval_try <- function(x) {
tryCatch(
eval(x, envir = .GlobalEnv),
error = function(cond) message("there was an error"),
warning = function(cond) message("there was a warning")
)
}
for (i in seq_along(test_text)) {
eval_try(test_text[i])
}
#> there was an error
do.call("eval_try", list(test_text))
#> there was an error
lapply(test_text, eval_try)
# there was an error
# [[1]]
# [1] 3.141593
#
# [[2]]
# [1] 3.141593
#
# [[3]]
# NULL
您看到的打印是lapply
函數的輸出。 您可以通過將結果分配給變量來抑制它,或者如果您真的不關心存儲輸出,請使用以下技巧invisible
。
> myfun <- function(x) x
>
> lapply(1:3, FUN = myfun)
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
> a <- lapply(1:3, FUN = myfun)
> invisible(lapply(1:3, FUN = myfun))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.