【问题标题】:Making Shiny Server (really bigrquery) think R is being run interactively让 Shiny Server(真正的 bigrquery)认为 R 正在交互式运行
【发布时间】:2014-12-19 00:10:05
【问题描述】:

我在 Shiny 服务器上有一个闪亮的应用程序,但如果 R​​ 未处于交互模式,则应用程序中使用的一个包会生气。对于我正在使用的功能,我不需要交互性。

我知道从命令行启动 R 时可以使用 --interactive 选项。有没有办法将它传递给闪亮的服务器?

谢谢!

编辑 - 具体问题似乎与 bigrquery 包有关。从闪亮的服务器调用query_exec 会返回错误:interactive() is not TRUE

【问题讨论】:

  • 你能重新定义interactive,让它返回TRUE
  • 嗨@jdharrison。我已经调查过了。交互式不仅仅是一种选择。通过调用 base 中的 interactive() 函数来检查交互性。看来您无法在 base.xml 中重新定义函数。我可以编写一个本地 interactive() 函数,但问题出在包中,因此创建本地函数不会影响包。

标签: r shiny shiny-server httr


【解决方案1】:

也许 global.R 中的以下内容会有所帮助(注意?assignInNamespace 等中的免责声明):

interactive <- function(){TRUE}
unlockBinding(sym="interactive", env=getNamespace("base"));
assignInNamespace(x="interactive", value=interactive, ns=asNamespace("base"), envir=getNamespace("base"));
assign("interactive", interactive, envir=getNamespace("base"));
lockBinding(sym="interactive", env=getNamespace("base"));
> 
> rm(interactive)
> interactive
function(){TRUE}
> base::interactive
function(){TRUE}

【讨论】:

  • 感谢@jdharrson,但不幸的是这不起作用。我不确定为什么。但是我尝试了相反的实验——将interactive 强制为FALSE,然后包(bigrquery)仍然运行。如果它有所作为,问题似乎出在 httr 包上,特别是 oauth-listener,至少根据这个 discussion on github
  • 我更进一步,尝试将 oauth-listener 强制交互设置为 FALSE 以查看是否可以在正常的 R 会话中破坏它,但它确实有效。也许涉及更深层次的东西。
猜你喜欢
  • 2017-05-17
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2017-05-10
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多