强制交互式会话与knitr添加下拉列表(GUI)

时间:2016-01-29 09:00:35

标签: r latex knitr interactive

我是R的新手所以任何评论,帮助将不胜感激!

我正在研究动态报告,我将把原始数据提供给R,然后输出PDF格式的输出汇总表,使用LaTeX格式化。 我正在处理的数据分为几个部分,有时只需要一个部分摘要。

为了做到这一点,我想实现简单的交互式下拉列表,它看起来像这样:

segments<- c("A","B","C") i <- menu(segments, graphics=TRUE, title="Choose segment")

但是,knitr是非交互式环境,我收到以下错误消息:

  

menu()不能用于非交互式

因此,有没有办法强制knitr进行交互,或者我可以以某种方式从其他文件中获取交互式部分?

我真的想以交互方式使用它,因为有时候报告会由不熟悉R的人编写,所以我想让它变得万无一失。

1 个答案:

答案 0 :(得分:2)

该问题要求让用户以交互方式从列表里面 RNW文档中选择一个项目(同样适用于其他编织的文件,如RMD):

%mydocument.Rnw

\documentclass{article}
\begin{document}
<<>>=
letterIndex <- menu(LETTERS, graphics = TRUE, title = "Select your favorite letter")
sprintf("My favorite letter is '%s'.", LETTERS[letterIndex])
@
\end{document}

使用&#34;编译PDF&#34;编织文档时会抛出错误。 Rstudio中的按钮,因为menu需要一个交互式R会话,但是&#34;编译PDF&#34;启动一个新的非交互式会话来处理文档。

  

menu(LETTERS, graphics = TRUE, title = "Select your favorite letter")中的错误:menu()无法以非交互方式使用

为了解决这个问题,&#34;编译PDF&#34;按钮必须避免。相反,文档可以编织knit / knit2pdf。请注意,这可能会产生一些意想不到的副作用,请参阅here以了解相关信息。

knit2pdf("mydocument.Rnw")有效(我在编写that comment时没有预料到)。选择菜单在编织过程中弹出。尽管如此,我更倾向于将针织和用户交互分开的解决方案(如评论中所示):

#control.R
letterIndex <- menu(LETTERS, graphics = TRUE, title = "Select your favorite letter")
knit2pdf("mydocument2.Rnw")
%mydocument2.Rnw

\documentclass{article}
\begin{document}
<<>>=
sprintf("My favorite letter is '%s'.", LETTERS[letterIndex])
@
\end{document}

此处,用户交互发生在文档编织之前。结果letterIndex保存在全局环境中,编织过程从那里读取。

在这两种情况下,用户现在打开一个包含knit2pdf(可能还有menu调用)的R脚本,而不是打开RNW文件并单击&#34;编译PDF&#34;点击&#34;来源&#34;。这不应该过多地增加难度。