Description Usage Arguments Details Functions Author(s) See Also Examples
View source: R/create_chunks.R
These helper functions allow one to identify all the chunks in a Rmarkdown document, split the document into pieces by a specific chunk so that one can either work with the chunk contents or remove the chunk, and remove several chunks at once.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
text |
Character vector with contents of chunk, one element per line of
text. If the character vector has just a single element, then an attempt
will be made to split it into lines using |
file |
Path to file containing chunk contents. Ignored if |
chunk.start.pattern |
Regular expression used to identify chunk starts. The default looks for lines beginning with three back quotes, followed by curly braces with some sort of text between them and then only spaces till the end of the line. This should generally work, but if the Rmarkdown document has chunks that have unusual headers, then this argument can be useful. In particular, if the document has chunks that begin without curly braces, these will not be recognized. |
chunk.end.pattern |
Regular expression used to identify the chunk end. Default should generally work. |
chunk_label |
Character string giving the chunk label or the chunk number
(as returned by |
... |
Additional arguments to be passed to |
chunk_labels |
A vector of numeric or character chunk labels
(as returned by |
output.file |
Name of a file where Rmd document with desired chunks removed is to be saved. |
list_rmd_chunks
takes a Rmarkdown document and returns a
data.frame
listing the essential information of every chunk, including
chunk type (language engine), label and start and end line numbers.
split_rmd_by_chunk
takes a Rmarkdown document and a chunk label or
number and returns the Rmarkdown document split into 4 pieces: the part
before the chunk, the chunk header, the chunk contents, the chunk tail and
the part after the chunk. These can then be used to either work with the
chunk contents or remove the chunk from the Rmarkdown document.
remove_chunks
removes several chunks, designated by their text or
numeric labels, all at once from a Rmarkdown document.
Note that the regular expression used by default to identify chunk starts is
not guaranteed to be exactly the same as that used by knitr
and may
not work if the Rmarkdown document has unusual chunks. In particular, each
chunk must have the chunk type and chunk options enclosed in curly braces. If
code chunks exist without curly braces, then these will generally be ignored,
but they could potentially cause problems in unusual cases.
list_rmd_chunks
: Returns a data frame with 4 columns: the chunk
type, the chunk label, the line number of the beginning of the chunk and
the line number of the end of the chunk.
split_rmd_by_chunk
: Returns a list with the contents of the Rmarkdown
document broken into 4 pieces: pre-chunk, chunk header, chunk contents,
chunk tail, and post-chunk.
remove_chunks
: Silently returns a character vector with the contents of
the Rmd file after having removed the desired chunks
David M. Kaplan dmkaplan2000@gmail.com
David M. Kaplan dmkaplan2000@gmail.com
David M. Kaplan dmkaplan2000@gmail.com
Other Chunk tools:
create_chunk()
,
create_data_chunk_dialog()
,
insert_data_chunk_template()
,
remove_chunks_dialog()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | # Use a temporary directory ----------------------------
owd = getwd()
td = tempdir()
setwd(td)
# Test --------------
library(knitrdata)
library(magrittr) # For pipe operator
# Create new Rmarkdown document
if (file.exists("test.create_chunks.Rmd"))
file.remove("test.create_chunks.Rmd")
rmarkdown::draft("test.create_chunks.Rmd","github_document","rmarkdown",
edit=FALSE)
# List all chunks in document
chunklst = list_rmd_chunks(file="test.create_chunks.Rmd")
chunklst
# Remove the pressure chunk
xx = split_rmd_by_chunk(file="test.create_chunks.Rmd",chunk_label="pressure")
txt = c(xx$pre_chunk,xx$post_chunk)
writeLines(txt,"test.create_chunks.Rmd")
# List chunks again
chunklst = list_rmd_chunks(file="test.create_chunks.Rmd")
chunklst
# Remove all but setup chunk
remove_chunks(file="test.create_chunks.Rmd",
chunk_labels = 2:nrow(chunklst),
output.file="test.create_chunks.Rmd")
# List all chunks again
chunklst = list_rmd_chunks(file="test.create_chunks.Rmd")
chunklst
# Create some binary data
x = data.frame(a=1:10,b=(1:10)^2)
saveRDS(x,"test.create_chunks.RDS")
# Push chunks into Rmarkdown document
# Insert in reverse order to not have to figure out line number
txt = create_chunk(chunk_label="plot",c("x","plot(b~a,data=x)"),chunk_type="r") %>%
insert_chunk(11,rmd.file="test.create_chunks.Rmd")
txt = data_encode("test.create_chunks.RDS","base64") %>%
create_chunk(chunk_label="thedata",output.var="x",format="binary",loader.function=readRDS) %>%
insert_chunk(11,txt)
txt = create_chunk(chunk_label="loadknitrdata","library(knitrdata)",chunk_type="r") %>%
insert_chunk(11,txt)
writeLines(txt,"test.create_chunks.Rmd")
# List all chunks again
chunklst = list_rmd_chunks(file="test.create_chunks.Rmd")
chunklst
# Render document to test
if (rmarkdown::pandoc_available(version="1.12.3"))
rmarkdown::render("test.create_chunks.Rmd")
# Clean up --------------
file.remove("test.create_chunks.Rmd","test.create_chunks.RDS",
"test.create_chunks.md","test.create_chunks.html")
unlink("test.create_chunks_files",recursive=TRUE)
setwd(owd)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.