如果我在R终端中剪切并粘贴代码,Knitr就不会产生我期待的东西

问题描述 投票:2回答:1

如果我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

这可能是什么原因?

r knitr r-markdown
1个回答
0
投票

这是一个古老的问题,这可能是不可能的,但今天你可以截取一个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
})
© www.soinside.com 2019 - 2024. All rights reserved.