我是R的新手所以任何评论,帮助将不胜感激!
我正在研究动态报告,我将把原始数据提供给R,然后输出PDF格式的输出汇总表,使用LaTeX格式化。 我正在处理的数据分为几个部分,有时只需要一个部分摘要。
为了做到这一点,我想实现简单的交互式下拉列表,它看起来像这样:
segments<- c("A","B","C")
i <- menu(segments, graphics=TRUE, title="Choose segment")
但是,knitr是非交互式环境,我收到以下错误消息:
menu()不能用于非交互式
因此,有没有办法强制knitr进行交互,或者我可以以某种方式从其他文件中获取交互式部分?
我真的想以交互方式使用它,因为有时候报告会由不熟悉R的人编写,所以我想让它变得万无一失。
答案 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;。这不应该过多地增加难度。