gpt4 book ai didi

r - 如何在每个 block 的基础上设置 knitr block 输出宽度?

转载 作者:行者123 更新时间:2023-12-03 23:54:57 25 4
gpt4 key购买 nike

我的问题:

是否 针织 有一个选项允许设置 R 的 width每个 block 的选项?

如果没有,是否有充分的理由(即, Root 于 knitr 模型的一些基本限制)它没有?

我试过的:

为了展示我想要的东西,这里有一个手动钩子(Hook)函数,它执行 基本上我想要的是。 (不过我不太喜欢它,(a)因为它丑陋,依赖于将变量 .width 分配到全局环境中,以及(b)因为它不能“开箱即用”作为提供的选项像 fig.widthout.width 等)

\documentclass[preview=true,width=3mm]{standalone}

\begin{document}

<<setup, include=FALSE, cache=FALSE>>=
options(width=60)

knit_hooks$set(width = function(before, options, envir) {
if(before) {
.width <<- options(width=options$width) ## Set width and save 'old' value
} else {
options(.width)} ## Restore width's 'old' value
})

@

First chunk uses default width
<<A>>=
c("aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg", "hhhhh")
@

Second chunk uses narrower supplied width, but then resets width to
pre-existing value \dots
<<B, width=20>>=
c("aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg", "hhhhh")
@

\noindent \dots as shown by results of the third chunk
<<C>>=
c("aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg", "hhhhh")
@

\end{document}

enter image description here

最佳答案

尽管不能解决整个问题,但您对代码的第一个提示是它用您的 .width 混淆了全局环境。多变的。这可以使用 local() 解决。作为 关闭机制,封装你的变量,这样你就不会在全局变量空间中发生冲突。

所以,如果你更换你的 knit_hooks$set调用:

knit_hooks$set(width=local({
.width <- 0
function(before, options, envir) {
if (before) .width <<- options(width=options$width)
else options(.width)
}
}))

它产生相同的结果而没有强制 .width 的问题进入全局环境。上面的其余代码与以前一样,具有相同的输出。

更多内容请访问 help(local) , 在 Advanced R Programming (Hadley Wickham),并且在野外有几个例子,例如@JeroenOoms' OpenCPU .

关于r - 如何在每个 block 的基础上设置 knitr block 输出宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23349525/

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