Как правильно создать 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")