如果我knit
下面的代码:
```{r, eval=TRUE}
times <- function(total = 3, name="a") {
ctr <- 1
function(expr, val, ok, visible) {
cat("[Task ", name, "] ", ctr,"\n", sep="")
ctr <<- ctr + 1
return(ctr <= total)
}
}
h <- taskCallbackManager()
h$suspend()
h$add(times())
h$add(times(4,"b"))
h$add(times(5,"c"))
h$add(times(6,"d"))
h$suspend(FALSE)
```
在最后一个命令(h$suspend(FALSE))
之后我没有任何输出。但是,如果我将代码剪切并粘贴到R中,我会得到以下输出:
[Task a] 1
[Task b] 1
[Task c] 1
[Task d] 1
这可能是什么原因?
这是一个古老的问题,这可能是不可能的,但今天你可以截取一个knitr
的钩子:
knit_hooks$set(evaluate = function(...) {
res <- evaluate::evaluate(...)
# instead of recordPlot()
plot <- Filter(evaluate::is.recordedplot, res)
plot <- if (length(plot)) plot[[1]]
# expression and equivalent of the globalenv()
args <- list(...)
env <- args$envir
expr <- parse(text = paste(args[[1]], collapse = '\n'))
# here call your actual callback
# return the value that knitr expects
res
})