Как правильно создать exe для r-кода

Я хочу, чтобы мои пользователи использовали блестящее приложение, которое хранится на gist.github.com, используя library(shiny);runGist("xxx"). Для этого я создал папку, содержащую переносные файлы Chrome, переносные R и 2:

1 - run.R - содержит следующий код:

library(shiny);runGist("xxx")

2 - VBScript, который должен вызывать run.r, чтобы запустить runGist.

Randomize
CreateObject("Wscript.Shell").Run "R-Portable\App\R-Portable\bin\R.exe CMD BATCH --vanilla --slave run.R" & " " & RND & " ", 0, False

Когда я нажимаю на VBScript, ничего не происходит, поэтому я думаю, что я что-то упускаю, как решить эту проблему?

UPDATE: после нажатия кнопки run.vbs я получил пронумерованный файл, когда я открыл его на Notepad ++, я получил следующий текст:

Downloading https://gist.github.com/#############/download
NULL
[1] TRUE

Listening on http://127.0.0.1:1337

Когда я скопировал http://127.0.0.1:1337 в браузер, он дает то, что я хочу. Итак, вопрос в том, как вызвать браузер с адресом, указанным в сообщении? - Я заметил, что каждый клик дает другой адрес.

Ответ 1

Вы можете переопределить опцию браузера по умолчанию, тогда runGist с launch.browser будет работать.

run.R

#Assuming your portable Chrome relative path is "Chrome\Application\chrome.exe"
options(browser = normalizePath("Chrome\\Application\\chrome.exe"));

library(shiny);
runGist("xxx", launch.browser = TRUE);

run.vbs

Set Fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("Wscript.Shell")
    'specify CD to start commands from script parent folder
    WshShell.CurrentDirectory = Fso.GetParentFolderName(WScript.ScriptFullName)

'Start the command as hidden and don't wait
WshShell.Run "R-Portable\App\R-Portable\bin\R.exe CMD BATCH --vanilla --slave run.R NUL", 0, False

Ответ 2

С точки зрения VBScript, поскольку все, что вы используете, относительные пути, если текущий активный каталог (откуда вычисляются относительные пути), не является тем, что, по вашему мнению, может иметь проблемы.

Вы можете попробовать что-то вроде (verbose version)

Option Explicit

    'Initialize PRNG
    Randomize 

Dim fso 
    ' As we are dealing with files/folders, it is better to use adecuate functions
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Dim baseFolder
    ' Retrieve the folder where the current script is stored
    baseFolder = fso.GetFile(WScript.ScriptFullName).ParentFolder.Path

Dim RScript
    ' Combine the current folder and file to execute 
    RScript = fso.BuildPath( baseFolder, "run.R" )

Dim R
    ' Combine the current folder and path to the R executable
    R = fso.BuildPath( baseFolder, "R-Portable\App\R-Portable\bin\R.exe" )

Dim command 
    ' compose the command to execute
    command = q(R) & " CMD BATCH --vanilla --slave " & q(RScript) & " " & Rnd

    ' Execute the composed command
    Call WScript.CreateObject("WScript.Shell").Run( command, 0, False )

' Just a helper function to quote the file/folder paths in the command    
Function q( text )
    q = """" & text & """"
End Function

Ответ 3

Что касается вашего обновления: Обратите внимание, что вы можете установить номер порта в качестве аргумента в runApp() Например: runApp (..., port = 1337)

Пример:

n <- 200


# Define the UI
ui <- bootstrapPage(
  numericInput('n', 'Number of obs', n),
  plotOutput('plot')
)


# Define the server code
server <- function(input, output) {
  output$plot <- renderPlot({
    hist(runif(input$n))
  })
}

# Return a Shiny app object
runApp(shinyApp(ui = ui, server = server), port = 1337)

Изменить: ответьте на вопрос:

если это не помогает:

library(shiny);runGist(..., launch.browser = TRUE, port = 1337)

попробуйте следующее:

library(shiny);runGist(..., port = 1337);browseURL("http://127.0.0.1:1337")