
¿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 chunk
opció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 part1
y part2
evaluar el código.
En el siguiente MWE, agregué dicha part3
configuración echo
a 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 part4
lugar 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}
Respuesta2
Lea sobre las opciones de fragmentos disponiblesymira como usarlos.
En este caso particular, elecho
y eval
las 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}