2017-01-04 24 views
12

Tôi muốn cho phép người dùng của mình sử dụng ứng dụng sáng bóng được lưu trữ trên gist.github.com sử dụng library(shiny);runGist("xxx"). Với mục đích này tôi đã tạo ra một thư mục có chứa Chrome di động, di động R và 2 tác phẩm:Cách tạo mã exe cho mã r một cách chính xác

1-run.R - chứa đoạn mã sau:

library(shiny);runGist("xxx") 

2 - VBScript mà nên gọi chạy. r vì vậy runGist sẽ được gọi.

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

Khi tôi nhấp vào VBScript không có gì xảy ra vì vậy tôi đoán tôi thiếu điều gì đó, cách giải quyết vấn đề này?

UPDATE: sau khi nhấp vào run.vbs tôi nhận được một tập tin được đánh số, khi tôi mở nó ra trên Notepad ++ Tôi đã nhận các văn bản sau đây:

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

Listening on http://127.0.0.1:1337 

Khi tôi sao chép http://127.0.0.1:1337 cho trình duyệt nó mang lại cho những gì tôi muốn. Câu hỏi đặt ra là cách gọi trình duyệt bằng địa chỉ được cung cấp trong thư? - Tôi nhận thấy rằng mỗi nhấp chuột cung cấp một địa chỉ khác.

+0

Hơi liên quan, xem https://github.com/wleepang/DesktopDeployR – r2evans

+0

có được một máy chủ sáng bóng ... nó xứng đáng với nỗ lực – Hao

Trả lời

5

Bạn có thể ghi đè tùy chọn trình duyệt mặc định, sau đó runGist với launch.browser sẽ chỉ làm việc.

run.R

#Assuming your portable Chrome's 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's 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 
+0

Cảm ơn bạn @ Kul-Tigin nó hoạt động !, Tôi chỉ cần thay đổi đường dẫn đến câu hỏi Installation.One di động Chome: Tôi thấy rằng sau khi nhấp vào tập tin .vbs tôi nhận được một số loại tập tin tạm thời: tức là radF068D.tmp .Is có một cách để bỏ qua việc tạo ra loại tập tin này. Tôi đoán rằng sau một năm sử dụng thư mục sẽ chứa hàng trăm tập tin tạm thời. – mql4beginner

+1

@ mql4beginner vui lòng trợ giúp. Tập tin đó không phải là ý tưởng của tôi, nó thay thế cho tập tin có tên 'RND' của bạn. Bạn có thể chặn đầu ra của R bằng cách sử dụng 'NUL'. Đã cập nhật câu trả lời. –

2

Từ quan điểm VBScript, vì tất cả những gì bạn đang sử dụng là đường dẫn tương đối, nếu thư mục hoạt động hiện tại (từ nơi đường dẫn tương đối được tính toán) không phải là điều bạn nghĩ bạn có thể gặp sự cố.

Bạn có thể thử với một cái gì đó tương tự (phiên bản verbose)

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 
+0

Cảm ơn @MC ND, xin vui lòng xem cập nhật của tôi, có lẽ bạn có thể giúp đỡ với vấn đề này. – mql4beginner

2

Về cập nhật của bạn: Lưu ý, bạn có thể thiết lập số cổng như một cuộc tranh cãi trong runApp() Ví dụ: runApp (... , port = 1337)

Ví dụ:

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) 

Edit: Câu trả lời cho theo dõi:

nếu điều này không giúp:

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

thử điều này:

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

Cảm ơn bạn @Tonio Liebrand, nhưng vấn đề là làm thế nào để mở Chrome di động trong địa chỉ http://127.0.0.1:1337 thay vì nhận được văn bản: Nghe trên http://127.0.0.1:1337 bên trong một tệp được tạo ra bởi chạy.vbs – mql4beginner

+1

@ mql4beginner: Kiểm tra chỉnh sửa của tôi. Và bạn nên chỉnh sửa câu hỏi của mình theo cách mà câu trả lời vẫn phù hợp với câu hỏi của bạn;) – BigDataScientist

+0

Cảm ơn những nỗ lực của bạn @Tonio Liebrand, giải pháp không hiệu quả với tôi nhưng tôi chắc chắn rằng một số khác sẽ thấy nó hữu ích. – mql4beginner

Các vấn đề liên quan