提取要在宽度受控的 knitr 中使用的 R 函数代码
Extracting Code of R function to be used in knitr with controlled width
我们可以使用formatR::usage(lm)
获取lm
函数的参数并且可以使用下面的命令将输出重定向到knitr
:
<<test, code=formatR::usage(lm), eval=FALSE>>=
@
不知道有没有这样的函数可以让lm
函数代码重定向到knitr
.
已编辑
使用以下代码(按照@JoshO'Brien 的建议)获得了要在 knitr
中使用的 lm
函数的代码:
<<test, code=lm, eval=FALSE>>=
@
但无法弄清楚如何控制 knitr
输出的 width
。
要嵌入某些函数的 'tidy' 定义 ,请参阅 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)>>=
@
当输出为 latex 时,有时会出现让换行符保持在页边距内的问题。这是一个已知问题,具有多个修复程序,但存在各种缺点。就像这一个,您可以在空白处获得完整的功能,但没有漂亮的色彩……这完全是您在解决方案中付出 and/or 努力的权衡问题。 :)
\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}
我们可以使用formatR::usage(lm)
获取lm
函数的参数并且可以使用下面的命令将输出重定向到knitr
:
<<test, code=formatR::usage(lm), eval=FALSE>>=
@
不知道有没有这样的函数可以让lm
函数代码重定向到knitr
.
已编辑
使用以下代码(按照@JoshO'Brien 的建议)获得了要在 knitr
中使用的 lm
函数的代码:
<<test, code=lm, eval=FALSE>>=
@
但无法弄清楚如何控制 knitr
输出的 width
。
要嵌入某些函数的 'tidy' 定义 ,请参阅 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)>>=
@
当输出为 latex 时,有时会出现让换行符保持在页边距内的问题。这是一个已知问题,具有多个修复程序,但存在各种缺点。就像这一个,您可以在空白处获得完整的功能,但没有漂亮的色彩……这完全是您在解决方案中付出 and/or 努力的权衡问题。 :)
\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}