## ----normal-print, comment=''--------------------------------------------
head(mtcars)
## ------------------------------------------------------------------------
library(knitr)
knit_print # an S3 generic function
methods(knit_print)
getS3method('knit_print', 'default') # the default method
normal_print
## ----collapse=TRUE-------------------------------------------------------
knit_print(1:10)
knit_print(head(mtcars))
## ------------------------------------------------------------------------
library(knitr)
# define a method for objects of the class data.frame
knit_print.data.frame = function(x, ...) {
res = paste(c('', '', kable(x, output = FALSE)), collapse = '\n')
asis_output(res)
}
## ----knit-print----------------------------------------------------------
1 + 1
head(letters)
list(a = 1, b = 9:4)
head(mtcars)
cat('This is cool.')
## ----eval=FALSE, tidy=FALSE----------------------------------------------
# knit_print.classA = function(x, ...) {
# # ignore options and inline
# }
# knit_print.classB = function(x, options, ...) {
# # use the chunk option out.height
# asis_output(paste(
# '',
# ))
# }
# knit_print.classC = function(x, inline = FALSE, ...) {
# # different output according to inline=TRUE/FALSE
# if (inline) {
# 'inline output for classC'
# } else {
# 'chunk output for classC'
# }
# }
# knit_print.classD = function(x, options, inline = FALSE, ...) {
# # use both options and inline
# }
## ------------------------------------------------------------------------
dummy_print = function(x, ...) {
cat("I do not know what to print!")
# this function implicitly returns an invisible NULL
}
## ----knit-print, render=dummy_print, collapse=TRUE-----------------------
1 + 1
head(letters)
list(a = 1, b = 9:4)
head(mtcars)
cat('This is cool.')
## ------------------------------------------------------------------------
1 + 1
invisible(1 + 1)
invisible(head(mtcars))
x = 1:10 # invisibly returns 1:10
## ----eval=FALSE, tidy=FALSE----------------------------------------------
# # pseudo code
# knit_print.ggvis = function(x, ...) {
# res = ggvis::print_this_object(x)
# knitr::asis_output(res, meta = list(
# ggvis = list(
# version = '0.1.0',
# js = system.file('www', 'js', 'ggvis.js', package = 'ggvis'),
# css = system.file('www', 'www', 'ggvis.css', package = 'ggvis')
# )
# ))
# }
## ----tidy=FALSE----------------------------------------------------------
library(knitr)
knit_print.foo = function(x, ...) {
res = paste('**This is a `foo` object**:', x)
asis_output(res, meta = list(
js = system.file('www', 'shared', 'shiny.js', package = 'shiny'),
css = system.file('www', 'shared', 'shiny.css', package = 'shiny')
))
}
## ------------------------------------------------------------------------
new_foo = function(x) structure(x, class = 'foo')
new_foo('hello')
## ------------------------------------------------------------------------
str(knit_meta(clean = FALSE))
## ------------------------------------------------------------------------
new_foo('world')
## ------------------------------------------------------------------------
knit_print.bar = function(x, ...) {
asis_output(x, meta = list(head = ''))
}
new_bar = function(x) structure(x, class = 'bar')
new_bar('**hello** world!')
new_bar('hello **world**!')
## ------------------------------------------------------------------------
str(knit_meta())
str(knit_meta()) # empty now, because clean = TRUE by default
## ------------------------------------------------------------------------
knitr::asis_output
## ----clean-up, include=FALSE---------------------------------------------
# R compiles all vignettes in the same session, which can be bad
rm(list = ls(all = TRUE))