tejer. Dividir una función en varios bloques

tejer. Dividir una función en varios bloques

¿Es posible con knitr dividir una función R en varios bloques (por motivos de documentación)? Aquí hay un MWE:

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

Respuesta1

Hay una chunkopción llamada eval, que controla si R evalúa o no el código. Si lo configura en FALSE, entonces el código no será evaluado y, por lo tanto, podría, en principio, escribir lo que quisiera escribir.

Además, comoYihui señala en los comentarios., puedes usarlo <<part3, ref.label=c('part1', 'part2')>>=para combinar tu part1y part2evaluar el código.

En el siguiente MWE, agregué dicha part3configuración echoa FALSE, para que no aparezca nada, ya que ya tiene el código mostrado en las partes 1 y 2. Luego, si lo desea, puede agregar un part4lugar donde realmente pasa un argumento a la función que ha definido.

\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}

ingrese la descripción de la imagen aquí

Respuesta2

Lea sobre las opciones de fragmentos disponiblesymira como usarlos.

En este caso particular, elecho y evallas opciones se pueden usar juntas...

<<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>>=
@

Respuesta3

La opción ref.label resuelve esto. Aquí está el ejemplo práctico.

\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}

información relacionada