Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在“knit”与“fig.keep='”匹配时指定地物名称;全部'`_R_Knitr - Fatal编程技术网

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中可读,那么看不见的标题会有帮助。