不打开 R 环境,是否有可能运行 RShiny 应用程序?

39

目前我有一个R闪亮的应用程序,要运行它,我打开RStudio并执行以下命令

Currently I have a R shiny app, to run it I open up RStudio and execute:

setwd("C:/Users/Me/Desktop/R/ShinyProject2")
library(shiny)
......
runApp()

我有一个位于本地目录中的R脚本。

我想将应用程序发送给不会使用R的同事进行审核。

是否有一种简单的方法编写可执行文件,直接打开UI,而无需打开R Studio来执行代码?


通过C语言链接libR,你就可以解决问题了。如果你想了解更多信息,请留言,我会尽力为你找到一些代码供你参考。 - hd1
如果你的工作场所有一个文件服务器系统(在那里你与同事共享文件夹),你可以跳过前三个步骤。只需在共享文件夹中安装R和运行shiny的包即可。这样更容易维护,因为所有同事都使用相同的R版本和包。 - Jonas Tundo
8个回答

26

现在可以实现这一点。您可以创建一个独立的Shiny应用程序,它可以在计算机上运行,而无需安装R或任何库。 有一个相对简单的方法(目前我只为Windows用户做过这个操作,但MacOS的一些操作也应该差不多),按照以下详细步骤进行:http://www.r-bloggers.com/deploying-desktop-apps-with-r/ 另外一种选择是将应用程序上传到Shiny服务器。


4
一般建议复制解决方案,以防链接被删除。 - thatsIch

25

RStudio != R

在你的R安装文件夹的bin文件夹中运行R.exe,即可在Windows上以简单的命令行界面使用R。

还有Rscript.exe,可以运行一个表达式或脚本文件。例如:

C:\Program Files\R\R-2.15.2\bin\RScript -e hist(runif(1000))

会生成一个包含直方图的PDF文件(如果提供正确的路径)。

所以,

  • 你的同事需要安装R
  • 你需要保证该安装程序拥有运行shiny所需的所有包
  • 或者你可以在你的代码中添加一系列install.packages()命令
  • 你需要给他们一个包含你的shiny代码的文件夹
  • 你可以为他们添加一个Windows Bat文件供点击
  • 运行该文件,它会调用RScript.exe并启动你提供的shiny程序包

或者将其托管在RStudio公共的shiny服务器上,但那样我们都可以看到它。


非常感谢。我不认为我能上传到Shimmer,因为涉及太多公司机密。 - Green Demon
2
如果你的工作场所有一个文件服务器系统(在那里你与同事共享文件夹),你可以跳过前三个步骤。只需在共享文件夹中安装R和运行shiny的包即可。这样更容易维护,因为所有同事都使用相同的R版本和包。 - Jonas Tundo

12

您现在可以使用RInno软件包来做这样的事情。设置步骤如下:

install.packages("RInno")
require(RInno)
RInno::install_inno()

然后你只需要调用两个函数来设置安装框架:

create_app(app_name = "myapp", app_dir = "path/to/myapp")
compile_iss()
如果您想要包含 R,则在 `create_app` 中添加 `include_R = TRUE`:

如果您想要包含 R,则在 create_app 中添加 include_R = TRUE

create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)

默认会包含 shiny、magrittr 和 jsonlite,所以如果你正在使用其他包(例如 ggplot2 或 plotly),只需将它们添加到 pkgs 参数中即可。您还可以将 GitHub 包添加到 remotes 参数中:

create_app(
    app_name = "myapp", 
    app_dir  = "path/to/myapp"
    pkgs     = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"),
    remotes  = c("talgalili/installr", "daattali/shinyjs"))

如果您对其他功能感兴趣,请查看 FI Labs - RInno


RInno表示它不支持Linux,但是否有支持Linux的版本或替代品? - Vass

9

我面临了相同的问题,使用了以下两种解决方案,两种方案都效果良好。

将应用程序发布到shinyapps.io

优点:随时随地都可以访问应用程序。

缺点:每月只有25个活动小时。

方法:

  1. 进入https://www.shinyapps.io/并创建一个免费帐户。
  2. 配置rsconnect以链接R与您的新shinyapps帐户(在shinyapps文档中有详细的逐步说明)。
  3. 在Rstudio中,点击“发布”按钮(在运行应用程序按钮旁边)。
  4. 从shinyapps.io仪表板获取应用程序地址,并将其发送给您的同事。

在局域网上共享应用程序

优点:需要多少活动小时就拥有多少活动小时。

缺点:需要连接到同一局域网(或使用VPN)。应用程序必须在连接到此网络的计算机上不断运行。此外,它不能同时为多个用户执行计算。

方法:您需要在计算机上运行应用程序,并通过更改runapp命令将其共享到局域网中:

runApp(host="0.0.0.0",port=5050)

然后应用程序可以通过http://[your-IP-address]:5050访问(参见此处:Hosting LAN Shiny apps run from command line)。


4

4
以下是一个快速修复方法。在命令行中进入项目目录,使用cd命令,然后:
 R -e "shiny::runApp(port=8000,host = getOption('shiny.host', '10.10.10.10'))"

现在URL 10.10.10.10:8000 将会处于活跃状态。

为了即使在您退出登录后也保持URL的活动状态,可以使用nohup。显然,这不是生产环境中所期望的设置。

 nohup R -e "shiny::runApp(port=8000,host = getOption('shiny.host', '10.10.10.10'))" &

3

我知道这是一个非常老的讨论,但最近我遇到了这个问题,并尝试了一些选项后,发现使用shinyshortcut包是最好的选择:

library(shinyShortcut) shinyShortcut(shinyDirectory = getwd(), OS = .Platform$OS.type, gitIgnore = FALSE)

谢谢您提供的解决方案。请问如果电脑上没有下载 R,这个方法还能行得通吗? - NBE
据我所知,您必须安装R。 - narjess abbassi

0

Spacedman提出的解决方案对我很有用。接下来,我想给出一些实际的例子。

步骤1。 假设你的同事不知道R和RStudio,他们仍然需要在他们的电脑上安装R。他们不一定需要RStudio。

步骤2。 他们需要安装你的shiny应用程序中的所有库。但是假设他们不知道如何安装它们。

他们必须运行以下R代码一次(带有一些示例库):

# collect here all the libraries used by your shiny app
install.packages(c('shiny', 'ggplot2', 'magrittr'), repos='http://cran.us.r-project.org')

如果他们没有安装权限或者想要在其他地方安装这些附加库,那么请指定它们需要安装的位置:
install.packages(c('shiny', 'ggplot2', 'magrittr'), 'E:/some_path/rlib', repos='http://cran.us.r-project.org')

对于非常懒惰的人,他们可以完全不使用R,而是调用一个批处理文件。您可以将这些R代码嵌入到名为“installer.R”的代码中,并从名为“installer.bat”的批处理文件中调用它,该文件包含以下内容:

set RSCRIPT=C:\Programme\R\R-4.1.0\bin\Rscript.exe
set SPATH=C:\Documents\R_codes

call "%RSCRIPT%" "%SPATH%\installer.R"

假设他们当前的版本是R-4.1.0,变量SPATH指定了"installer.R"的位置。

现在,我们(几乎)准备好开始使用shiny了。

第三步。 通常情况下,当您从R-Studio运行shiny应用程序时,您会在shiny代码中包含命令library(shiny),然后在R-Studio中单击图标按钮“运行应用程序”。但是如果没有R-Studio,您必须加载shiny,然后使用命令行运行应用程序。对我来说,通过使用两个R代码可以实现。 第一个,我们称之为“loader.R”,其中包含:

library(shiny)
runApp('E:/path_to_your_app/myApp.R', launch.browser=TRUE)

而第二个是你的应用程序“myApp.R”:

library(shiny) # you can uncomment this because already in loader.R but leaving it does not harm

ui <- ...

server <- ...

shinyApp(ui = ui, server = server)

选项launch.browser=TRUE将在浏览器中打开应用程序。默认情况下,shiny在R-Studio内部使用"window"选项运行,而没有R-Studio则无法工作。
假设您已经在路径E:/some_path/rlib中安装了必要的库。然后,您必须在loader.R代码中使用.libPaths指定它:
.libPaths("E:/some_path/rlib")
library(shiny)
runApp('E:/path_to_your_app/myApp.R', launch.browser=TRUE)

第四步。 创建一个名为“call_siny_app.bat”的批处理文件来调用你的闪亮应用程序。它将包含以下内容:
set RSCRIPT=C:\Programme\R\R-4.1.0\bin\Rscript.exe
set SPATH=E:\path_to_your_app

call "%RSCRIPT%" "%SPATH%\loader.R"

代码调用了"loader.R"(SPATH必须指定正确的路径),然后调用了"myApp.R"。

你完成1到4步,你的同事只需运行call_siny_app.bat即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接