提取具有受控宽度的编织器中使用的R函数代码

时间:2015-06-02 16:30:06

标签: r knitr sweave

我们可以使用formatR::usage(lm)来获取lm函数的参数,并可以使用以下命令将输出重定向到knitr

<<test, code=formatR::usage(lm), eval=FALSE>>=
@

我想知道是否有这样的功能可以让lm功能代码重定向到knitr

被修改

使用以下代码({JoshO'Brien建议)获取lm函数的代码{/ 1}}:

knitr

但无法弄清楚如何控制<<test, code=lm, eval=FALSE>>= @ 输出的width

1 个答案:

答案 0 :(得分:3)

嵌入一个整洁的&#39;某些函数的定义参见Yihui's self-explanatory existing code

<<insert-fun, echo=FALSE>>=
insert_fun = function(name) {
  read_chunk(lines = capture.output(dump(name, '')), labels = paste(name, 'source', sep = '-'))
}
@

<<insert-lm, echo=FALSE>>=
insert_fun('lm')
@

<<lm-source, eval=FALSE, tidy=TRUE, tidy.opts=list(width.cutoff=30)>>=
@

Example Rnw and Rmd Gist

当输出转到乳胶时,有时会出现让换行符保持在页边距内的问题。它是一个已知的问题,有多个修复,有各种缺点。像这样你可以在边缘内获得全部功能,但没有漂亮的颜色......这就是你在解决方案中所做的权衡和/或努力的问题。 :)

\documentclass{article}

\usepackage{listings}
\usepackage{inconsolata}

<<echo=FALSE>>=
options(width=60)

listing <- function(x, options) {
  paste("\\begin{lstlisting}[language=R,basicstyle=\\ttfamily,breaklines=true]\n",
    x, "\\end{lstlisting}\n", sep = "")
}
knit_hooks$set(source=listing, output=listing)

insert_fun = function(name) {
  read_chunk(lines = capture.output(dump(name, '')), labels = paste(name, 'source', sep = '-'))
}

@

<<insert-lm, echo=FALSE>>=
insert_fun('lm')
@

\begin{document}

<<lm-source, eval=FALSE, tidy=TRUE, tidy.opts=list(width.cutoff=50)>>=
@

\end{document}

enter image description here