
Можно ли с помощью 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. Затем, если хотите, вы можете добавить , где вы фактически передаете аргумент функции, которую вы определили.echo
FALSE
part4
\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}