
Last chance! 50% off unlimited learning
Sale ends in
Chunks can be put in an external script, and this function reads chunks into
the current knitr session; read_demo()
is a convenience function
to read a demo script from a package.
read_chunk(path, lines = readLines(path, warn = FALSE), labels = NULL, from = NULL,
to = NULL, from.offset = 0L, to.offset = 0L)read_demo(topic, package = NULL, ...)
Path to the R script.
Character vector of lines of code. By default, this is read from
path
.
Character vector of chunk labels (default NULL
).
Numeric vector specifying the starting/ending line numbers of code chunks, or a character vector; see Details.
Offsets to be added to from
/to
.
Name of the demo and the package. See demo
.
Arguments passed to read_chunk
.
As a side effect, code chunks are read into the current session so that future chunks can (re)use the code by chunk label references.
There are two approaches to read external code into the current session: (1)
Use a special separator of the from ## ---- chunk-label
(at least four
dashes before the chunk label) in the script; (2) Manually specify the
labels, starting and ending positions of code chunks in the script.
The second approach will be used only when labels
is not NULL
.
For this approach, if from
is NULL
, the starting position is 1;
if to
is NULL
, each of its element takes the next element of
from
minus 1, and the last element of to
will be the length of
lines
(e.g. when from = c(1, 3, 8)
and the script has 10 lines
in total, to
will be c(2, 7, 10)
). Alternatively, from
and to
can be character vectors as regular expressions to specify the
positions; when their length is 1, the single regular expression will be
matched against the lines
vector, otherwise each element of
from
/to
is matched against lines
and the match is
supposed to be unique so that the numeric positions returned from
grep()
will be of the same length of from
/to
. Note
labels
always has to match the length of from
and to
.
# NOT RUN {
## put this in foo.R and read_chunk('foo.R')
## ---- my-label ----
1 + 1
lm(y ~ x, data = data.frame(x = 1:10, y = rnorm(10)))
## later you can use <<my-label>>= to reference this chunk
## the 2nd approach
code = c("#@a", "1+1", "#@b", "#@a", "rnorm(10)", "#@b")
read_chunk(lines = code, labels = "foo") # put all code into one chunk named foo
read_chunk(lines = code, labels = "foo", from = 2, to = 2) # line 2 into chunk foo
read_chunk(lines = code, labels = c("foo", "bar"), from = c(1, 4), to = c(3, 6))
# automatically figure out 'to'
read_chunk(lines = code, labels = c("foo", "bar"), from = c(1, 4))
read_chunk(lines = code, labels = c("foo", "bar"), from = "^#@a", to = "^#@b")
read_chunk(lines = code, labels = c("foo", "bar"), from = "^#@a", to = "^#@b",
from.offset = 1, to.offset = -1)
## later you can use, e.g., <<foo>>=
knitr:::knit_code$get() # use this to check chunks in the current session
knitr:::knit_code$restore() # clean up the session
# }
Run the code above in your browser using DataLab