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

Forcing interactive session with knitr to add drop down list (GUI)

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

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

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

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

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

menu() cannot be used non-interactive

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

我真的很想交互式地使用它,因为有时不熟悉 R 的人会编译报告,所以我想让它万无一失。

该问题要求一种方法让用户以交互方式select列表中的项目 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}

当使用 Rstudio 中的 "Compile PDF" 按钮编织文档时,这会引发错误,因为 menu 需要交互式 R 会话,但 "Compile PDF" 启动一个新的非交互式会话以处理文档。

Error in menu(LETTERS, graphics = TRUE, title = "Select your favorite letter"): menu() cannot be used non-interactively

要解决此问题,必须避免使用 "Compile PDF" 按钮。相反,可以调用 knit/knit2pdf 编织文档。请注意,这可能会产生一些意想不到的副作用,请参阅 了解相关信息。

knit2pdf("mydocument.Rnw") 有效(这是我在写 时没想到的)。选择菜单会在编织过程中弹出。不过,我更喜欢将编织和用户交互分开的解决方案(如评论中所建议的):

#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 文件并单击 "Compile PDF",然后单击 "Source"。这应该不会增加太多难度。