强制与 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"。这应该不会增加太多难度。
我是 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"。这应该不会增加太多难度。