R 如何在“knit”与“fig.keep='”匹配时指定地物名称;全部'`
我正在使用R 如何在“knit”与“fig.keep='”匹配时指定地物名称;全部'`,r,knitr,R,Knitr,我正在使用knitr生成报告。然而,我通常先准备包含所有情节的“内部”文件,然后准备一份最终报告或论文,只想包括一些数字 比如说,我有一组系统生成的图形,比如我在我的样本上循环: <<sample, fig.keep = 'all'>>= specimen <- c("436a", "783a", "10b") for (s in specimen) # in reality it would e.g. be levels (specimen) plot (r
knitr
生成报告。然而,我通常先准备包含所有情节的“内部”文件,然后准备一份最终报告或论文,只想包括一些数字
比如说,我有一组系统生成的图形,比如我在我的样本上循环:
<<sample, fig.keep = 'all'>>=
specimen <- c("436a", "783a", "10b")
for (s in specimen) # in reality it would e.g. be levels (specimen)
plot (results [s])
@
=
样本好问题。不确定这是否是一个令人满意的答案:
\documentclass{article}
\begin{document}
<<prepare-src, include=FALSE>>=
s = names(iris)[-5]
# construct the source document
src = sprintf('<<sample-%s>>=
hist(iris[,"%s"], col="gray", border="white")
@', s, s)
@
% evaluate the source
\Sexpr{knit(text = src)}
\end{document}
\documentclass{article}
\开始{document}
=
s=姓名(虹膜)[-5]
#构造源文档
src=sprintf('=
历史(虹膜[,“%s”],col=“灰色”,border=“白色”)
@",s,s)
@
%评估来源
\Sexpr{knit(text=src)}
\结束{document}
在您的情况下,您只需要决定将哪个样本放入s
这里有另一种方法(尽管有点复杂)来实现相同的使用挂钩。我们使用两个钩子,一个基于块选项fig.names
重命名图形的块钩子,以及一个替换文档中名称的输出钩子。我确信这段代码可以重构,甚至可以插入到knitr
中,使其正常工作
\documentclass{article}
\begin{document}
<<main, echo = F>>=
knit_hooks$set(fig.names = function(before, options, envir){
if (!before) {
from = dir('figure', pattern = opts_current$get('label'), full = TRUE)
to = sprintf('%s.pdf', file.path('figure',
paste(opts_current$get('label'), options$fig.names, sep = "-")))
file.rename(from, to)
}
})
knit_hooks$set(chunk = function(x, options){
if (is.null(options$fig.names)){
knitr:::.chunk.hook.tex(x, options)
} else {
chunk_name = opts_current$get('label')
x = gsub(sprintf('%s[0-9]', chunk_name),
sprintf("%s-%s", chunk_name, options$fig.names), x)
knitr:::.chunk.hook.tex(x, options)
}
});
@
<<iris, fig.names = letters[1:4]>>=
invisible(lapply(iris[,-5], hist, col = 'gray', border = 'white'))
@
\end{document}
\documentclass{article}
\开始{document}
=
knit_hooks$set(图名称=函数(之前、选项、环境){
如果(!之前){
from=dir('figure',pattern=opts_当前$get('label'),full=TRUE)
to=sprintf(“%s.pdf”,file.path('figure',
粘贴(选择当前$get('label'),选项$fig.names,sep=“-”))
重命名(从、到)
}
})
knit_hooks$set(块=函数(x,选项){
if(为空(选项$fig.names)){
knitr::.chunk.hook.tex(x,选项)
}否则{
chunk\u name=opts\u当前$get('标签')
x=gsub(sprintf(“%s[0-9]”,块名称),
sprintf(“%s-%s”,区块名称,选项$fig.names),x)
knitr::.chunk.hook.tex(x,选项)
}
});
@
=
不可见(重叠(虹膜[,-5],历史,颜色='灰色',边框='白色')
@
\结束{document}
谢谢你,伊慧。我承认我希望有更优雅的东西,但我至少会用它来做我的私人物品。如果我向我的合作者发送这样的文件,他们可能会发疯,而且这无法说服他们切换到knitr
/swave
…关键的困难在于动画。我必须使用图1,图2。。。否则,应该可以用您自己的方式命名地物文件。让我想一想。谢谢Ramnath,我将在此基础上构建我的钩子。需要一些细节才能使其充分发挥作用。1) to
应仅捕获编号的文件(一旦重命名的文件存在,当前版本将失败!)。a) to
需要进行适当的排序(10>9),3)\includegraphics
的输出也需要更多的注意:目前,iris-a
包含了4次。我可能有点误解,但是你能用与背景相同的颜色打印标题吗,例如白色,使它们不可见,还可以进行调试吗?@PatrickT:这不是为了调试,而是为了在演示文稿或更长的论文中选择合适的系列。看不见的标题对此没有帮助-如果在文件管理器的图标Preview中可读,那么看不见的标题会有帮助。