从Rscript以交互方式运行R.

时间:2015-07-20 20:45:47

标签: r shiny r-markdown rscript

我试图从Rscript启动一个闪亮的应用程序或交互式.Rmd文档。但是,我得到的只是一条消息

  

聆听http://127.0.0.1:...

我相信这是因为R以交互模式运行(another post关于此)。如何编写正确的Rscript以便以下任何一种都可以工作?

我的脚本

#!/usr/bin/Rscript

## This
library(shiny)
runApp(appDir = "../app")

## Or this
## rmarkdown::run("Main.Rmd")

2 个答案:

答案 0 :(得分:4)

如果我正确理解了您的问题,我可以使用littler来实现此目的,我使用var smtpSession = MCOSMTPSession() smtpSession.hostname = "smtp.gmail.com" smtpSession.username = "matt@gmail.com" smtpSession.password = "xxxxxxxxxxxxxxxx" smtpSession.port = 465 smtpSession.authType = MCOAuthType.SASLPlain smtpSession.connectionType = MCOConnectionType.TLS smtpSession.connectionLogger = {(connectionID, type, data) in if data != nil { if let string = NSString(data: data, encoding: NSUTF8StringEncoding){ NSLog("Connectionlogger: \(string)") } } } var builder = MCOMessageBuilder() builder.header.to = [MCOAddress(displayName: "Rool", mailbox: "itsrool@gmail.com")] builder.header.from = MCOAddress(displayName: "Matt R", mailbox: "matt@gmail.com") builder.header.subject = "My message" builder.htmlBody = "Yo Rool, this is a test message!" let rfc822Data = builder.data() let sendOperation = smtpSession.sendOperationWithData(rfc822Data) sendOperation.start { (error) -> Void in if (error != nil) { NSLog("Error sending email: \(error)") } else { NSLog("Successfully sent email!") } } 代替Rscript来执行围绕R的脚本编写任务。我正在运行CentOS 7 ,根据你问题中的代码,你看起来像是在类Unix机器上,所以installing littler应该不是问题。为了获得最低的可重复性,我使用了RStudio提供的默认闪亮应用程序和基于闪亮的Rmarkdown模板,分别将它们保存为testapp(项目/应用程序目录名称)和testRMD.rmd。然后,我有以下脚本:

testapp.r

#!/usr/bin/env r

shiny::runApp(
  "~/tmp/delete/testapp",
  port = 7088, 
  launch.browser = TRUE,
  host = "127.0.0.1")

testRMD.r

#!/usr/bin/env r

rmarkdown::run(
  file = "testRMD.rmd",
  dir = "~/tmp/delete",
  shiny_args = list(
    port = 7088,
    launch.browser = TRUE,
    host = "127.0.0.1"))

设置这些文件的权限,以便执行它们 -

[nathan@nrussell R]$ chmod +x testapp.r testRMD.r

chmod +u ...应该足够,但无论如何......),你应该全部设置从你的终端等运行它们......

[nathan@nrussell R]$ ./testapp.r
Loading required package: shiny

Listening on http://127.0.0.1:7088

enter image description here

[nathan@nrussell R]$ ./testRMD.r
Loading required package: shiny

Listening on http://127.0.0.1:7088

enter image description here

我省略了Rmd文件的一些额外命令行输出,但我确定如果需要可以轻松地抑制它。无论如何,这似乎工作正常 - 闪亮的应用程序和Rmarkdown应用程序都是交互式的,就像从RStudio发布时一样 - 但是如果你有其他想法请澄清。

答案 1 :(得分:0)

谢谢@nrussell,你的例子对我帮助很大!

这是我在 Windows 10 上启动交互式降价文档的解决方案。

REM Change to correct directory
cd "C:\Users\me\Documents\project_folder\"

REM Print files available (not required, but helpful)
dir

REM Point system to R's Pandoc with Rscript then launch
"C:\Program Files\R\R-4.0.3\bin\Rscript.exe" -e ^
"Sys.setenv(RSTUDIO_PANDOC='C:/Users/me/Documents/RStudio/bin/pandoc'); rmarkdown::run(file = 'myInteractiveMarkdown.Rmd', shiny_args = list(launch.browser = TRUE, host = '127.0.0.1'))"

我发现我最初遇到了两个错误:

  1. 当我没有将系统环境指向 R 的 pandoc 时,它给出了错误消息 error pandoc version 1.12.3 or higher is required,我使用说明解决了该消息 here
  2. 当我在 shiny_args 中设置端口时,bat 文件的后续执行会得到端口已经繁忙的错误