gpt4 book ai didi

r - 将 knitr Chunk 代码和输出拆分为两个不同的 knitrout

转载 作者:行者123 更新时间:2023-12-04 11:05:56 25 4
gpt4 key购买 nike

knitr Chunk选项 results = "hold"可以把输出放在Chunk Code之后.我想知道如何拆分knitr将代码和输出分 block 成两个不同的 knitrouts可能带有 Code 的标题和 Output .在此先感谢您的帮助。

\documentclass{article} 
\begin{document}

<< label=Test, results = "hold" >>=
1:100
args(lm)
@
\end{document}

所需输出

代码
1:100
args(lm)



输出
 [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[91] 91 92 93 94 95 96 97 98 99 100
function (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)

已编辑

我知道这可以通过放置两个 block 来完成,一个只显示代码,另一个只显示代码。对于长文档,这是一个额外的麻烦。我想知道这是否可以通过一些钩子(Hook)获得。

最佳答案

您必须尝试格式化,但您可以通过修改 source 来实现。 code hook .我在下面展示的实际上是对基本 render_latex hook 的一个非常简单的修改。增加了 \\noindent\\textbf{Code:}在代码和 \\noindent\\textbf{Output:} 之前之后:

\documentclass{article} 
\begin{document}

<<setup, include=FALSE>>=
knit_hooks$set(
source = function(x, options) {
x = knitr:::hilight_source(x, 'latex', options)
if (options$highlight) {
if (options$engine == 'R' || x[1] != '\\noindent') {
paste(c('\\noindent\\textbf{Code:}\\begin{alltt}', x, '\\end{alltt}', '','\\noindent\\textbf{Output:}'),
collapse = '\n')
} else {
if ((n <- length(x)) > 5) x[n - 3] = sub('\\\\\\\\$', '', x[n - 3])
paste(c('\\noindent\\textbf{Code:}',x, '','\\noindent\\textbf{Output:}'),
collapse = '\n')
}
} else .verb.hook(x)
}
)
@

Here's your first chunk.

<<chunk1, results = "hold" >>=
1:100
args(lm)
@

And here's another.

<<chunk2, results = "hold">>=
1:5
6:10
@

That seems to be it.

\end{document}

结果如下:

enter image description here

感谢@mrbcuda 在评论中建议的轻微修改意味着您可以分离代码和输出帧:

这是 setup的修改 block :
<<setup, include=FALSE>>=
knit_hooks$set(
source = function(x, options) {
x = knitr:::hilight_source(x, 'latex', options)
if (options$highlight) {
if (options$engine == 'R' || x[1] != '\\noindent') {
paste(c('\\noindent\\textbf{Code:}\\begin{alltt}', x, '\\end{alltt}', '','\\end{kframe}\\begin{kframe}\\noindent\\textbf{Output:}'),
collapse = '\n')
} else {
if ((n <- length(x)) > 5) x[n - 3] = sub('\\\\\\\\$', '', x[n - 3])
paste(c('\\noindent\\textbf{Code:}',x, '','\\noindent\\textbf{Output:}'),
collapse = '\n')
}
} else .verb.hook(x)
}
)
@

结果输出:

enter image description here

关于r - 将 knitr Chunk 代码和输出拆分为两个不同的 knitrout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com