Making knitr run a r script: do I use read_chunk or source?

前端 未结 3 1142
长情又很酷
长情又很酷 2020-12-24 07:54

I am running R version 2.15.3 with RStudio version 0.97.312. I have one script that reads my data from various sources and creates several data.tables. I then have another r

相关标签:
3条回答
  • 2020-12-24 08:10

    read_chunk() only reads the source code (for future references); it does not evaluate code like source(). The purpose of read_chunk() was explained in this page as well as the manual.

    0 讨论(0)
  • 2020-12-24 08:20

    In case it helps anyone else, I've found using read_chunk() to read a script without evaluating it can be useful in two ways. First, if you are working with the R script directly or interactively, you might want a long preamble of code that loads packages, data, etc. Such a preamble, however, could be unnecessary and slow if, for example, earlier code chunks in the main document already loaded data.

    Second, you might have a script with many chunks and want control over which ones run where (e.g., a plot or a table in a specific place). I use source when I want to run everything in a script (for example, at the start of a document to load custom functions). I've started using read_chunk early in the document to load scripts and then selectively run the chunks I want where I need them.

    0 讨论(0)
  • 2020-12-24 08:31

    There isn't an option to run a chunk interactively from within knitr AFAIK. However, this can be done easily enough with something like:

    #' Run a previously loaded chunk interactively
    #'
    #' Takes labeled code loaded with load_chunk and runs it in the /global/ envir (unless otherwise specified)
    #'
    #' @param chunkName The name of the chunk as a character string
    #' @param envir The environment in which the chunk is to be evaluated 
    run_chunk <- function(chunkName,envir=.GlobalEnv) {
        chunkName <- unlist(lapply(as.list(substitute(.(chunkName)))[-1], as.character))    
        eval(parse(text=knitr:::knit_code$get(chunkName)),envir=envir) 
    } 
    NULL
    
    0 讨论(0)
提交回复
热议问题