同时从多台计算机运行相同的R脚本

时间:2017-05-31 16:36:38

标签: r

我有一个R脚本,一个特定的Shiny应用程序,它位于网络驱动器上。有多台计算机需要能够运行此应用程序,因此可能需要多个人同时运行它。

目前,我只是通过容纳多个重复的Shiny应用程序来解决问题,并让每台计算机都能访问一个独特的副本。但是,随着用户数量的增加,跟上这一点变得越来越困难。

有没有办法让多台计算机同时访问同一个R脚本,并且只要他们需要多长时间就打开一个会话?

2 个答案:

答案 0 :(得分:1)

如果您使用R包路线,并且:

  • 您希望用户知道他们的包裹何时过期
  • 你的包裹代码是git仓库(总是一个好主意)
  • 您的用户使用devtools::install_git("path/to/package/git/repo")
  • 安装软件包

然后您可以将这些行添加到您的包的.onload()方法(documented here和此处:?.onLoad):

# Check if the package is up to date
pd <- packageDescription(pkgname)
out_of_date_message_template <- 
    'Your copy of package %s is not up to date.\nUse devtools::install_git("%s") to update this package\n'
if(identical(pd$RemoteType,"git")){
    try({
        # get the hash of the remote repo
        out_file <- tempfile()
        on.exit(unlink(out_file))
        failed <- system2("git",sprintf('ls-remote "%s"',pd$RemoteUrl),stdout = out_file)
        if(failed)
            return() # failed to get the git repo hash
        remotes <- readLines(out_file)
        if(!identical(pd$RemoteSha,gsub("\t.*","",remotes[1])))
            packageStartupMessage(
                  sprintf(out_of_date_message_template,
                          pkgname,
                          gsub("\\\\","\\\\\\\\",pd$RemoteUrl)))
    })
}

然后当您将更新推送到您的网络git repo时,具有过期代码的用户在致电library(my_app)

时会收到此消息
Your copy of package my_app is not up to date.
Use devtools::install_git("path\\to\\package\\git\\repo") to update this package

答案 1 :(得分:0)

在本地计算机上安装git后,在网络驱动器上初始化repo,如下所示:

cd my/network/shiny-app
git init
git add .
git commit -m "initial commit"

然后在每台计算机上

cd some/place/nice
git clone my/network/shiny-app
cd shiny-app
ls  # hey look- all my files are now in this directory!

当您决定更新代码并需要将其提取到每台计算机时,互联网上有很多很好的git教程。