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')>>=для объединения вашего part1и part2и фактической оценки кода.

В следующем 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}

Связанный контент