【问题标题】:Forcing interactive session with knitr to add drop down list (GUI)强制与 knitr 进行交互会话以添加下拉列表(GUI)
【发布时间】:2016-05-06 22:49:03
【问题描述】:

我是 R 新手,所以任何 cmets,我们将不胜感激!

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

为此,我想实现简单的交互式下拉列表,如下所示:

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

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

menu() 不能用于非交互式

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

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

【问题讨论】:

  • 包含i &lt;- menu(...);knit2pdf(input = ...) 的文件怎么样?假设“不熟悉 R 的人”能够获取 R 文件...
  • @CL。您好,感谢您的评论!正如我所说,我对 R 也很陌生,所以您能否详细说明一下,因为我没有完全遵循。谢谢

标签: r latex knitr interactive


【解决方案1】:

该问题要求用户以交互方式从列表中选择一个项目一个 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 中的“编译 PDF”按钮编织文档时,这会引发错误,因为 menu 需要交互式 R 会话,但“编译 PDF”会启动一个新的非交互式会话来处理文档。

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

要解决此问题,必须避免使用“编译 PDF”按钮。相反,可以调用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保存在全局环境中,编织过程从那里读取。

在这两种情况下,用户现在都不是打开 RNW 文件并单击“编译 PDF”,而是打开包含 knit2pdf(可能还有 menu 调用)的 R 脚本并单击“源”。这不应该增加太多的难度。

【讨论】:

  • 谢谢。您的解决方案完全符合我的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多