knitr. 将函数拆分为多个块

knitr. 将函数拆分为多个块

是否可以使用 knitr 将 R 函数拆分为多个块(出于文档原因)?以下是 MWE:

\documentclass{article}
\begin{document}
Part1 gives salutation. 
<<part1>>=
hello <- function(x){
  print("Hi")
@
Part2 adds the name.
<<part2>>=
  print(x)}
@
\end{document}

答案1

有一个chunk名为 的选项eval,它控制代码是否实际由 R 评估。如果将其设置为FALSE,则代码将不会被评估,因此原则上您可以输入任何您想要输入的内容。

此外,作为易晖在评论中指出,您可以使用<<part3, ref.label=c('part1', 'part2')>>=来结合您的part1part2并实际评估代码。

在下面的 MWE 中,我添加了这样一个设置part3,以便不出现任何内容,因为您已经拥有第 1 部分和第 2 部分中显示的代码。然后,如果您愿意,您可以添加一个实际上将参数传递给您定义的函数的地方。echoFALSEpart4

\documentclass{article}

\begin{document}

Part1 gives salutation. 
<<part1, eval=FALSE>>=
hello <- function(x){
  print("Hi")
@
Part2 adds the name.
<<part2, eval=FALSE>>=
  print(x)}
@

<<part3, ref.label=c('part1', 'part2'), echo=FALSE>>=
@

<<part4>>=
hello("Dan Wright")
@

\end{document}

在此处输入图片描述

答案2

阅读可用的块选项了解如何使用它们

在这个特殊案例中,echo eval选项可以一起使用...

<<the_func, echo=FALSE>>=
hello <- function(x){
  print("Thanks")
  print(x)
}
@

<<the_func, echo=1:2, eval=FALSE>>=
@

<<the_func, echo=3:4, eval=FALSE>>=
@

答案3

ref.label 选项解决了这个问题。以下是实际示例。

\documentclass{article}
\begin{document}
Part1 gives salutation. 
<<part1,eval=FALSE>>=
hello <- function(x){
  print("Thanks")
@
Part2 adds the name.
<<part2,eval=FALSE>>=
  print(x)}
@
<<part3,echo=FALSE,ref.label=c('part1','part2')>>=
@
<<executefunction>>=
hello('Adam and Yihue')
@
\end{document}

相关内容