2017-02-27 25 views
1

我有ui.R,server.R,global.R在閃亮的應用程序中。如何在R中使用global.R中的無效全局變量Shiny

當我選擇dataset並按actionButton時,我想要使用反應性全局變量。

實施例:

ui.R

fluidPage(
    titlePanel("Using global variable"), 
    fluidRow(
     uiOutput("ui1"), 
     uiOutput("ui2"), 
     uiOutput("ui3") 
    ), 
) 
) 

server.R

function(input, output) { 

    output$ui1 <- renderUI({ 
    selectInput("dataset", "firstValue", choices = c("first", "second", "third") 
    }) 

    output$ui2 <- renderUI({ 
     actionButton("doIt", class="btn-primary", "change") 
    }) 

    output$ui3 <- renderText({ 
     paste(catPath) 
    }) 
} 

global.R

catPath <<- paste(output$dataset, "/completed", sep="") 

結果是first/completedui3 renderText,當我選擇firstdataset。然後按actionButton

我該如何完成這個過程?

+0

您的代碼有額外的和缺失的逗號/ parens。 – r2evans

+0

我編輯它。請檢查一下。 –

+0

一般而言,'global.r'用於沒有反應的函數,數據等。在server.r –

回答

3

我同意@JohnPaul和@ Lee88,您的catPath可能屬於server.R。話雖如此,我現在就將它保存下來(假設你在MWE中有其他原因)。

global.R

catPath <- "" 

我需要將其設置的東西,以便作爲參考,在以後,否則這裏使用的值應該是毫無意義的(不過,如果不採取行動,將被退回) 。

ui.R

我加了一個 「停下來?」操作按鈕,以便您可以「退出」您的應用程序並將catPath的值捕獲到呼叫環境中。如果您不打算故意退出應用程序,則不需要。

fluidPage(
    titlePanel("Using global variable"), 
    fluidRow(
    uiOutput("ui1"), 
    uiOutput("ui2"), 
    uiOutput("ui3"), 
    actionButton("stopme", "Stop?") 
) 
) 

server.R

我改變output$ui3創建HTML對象(不進行計算),然後觀察他們兩個事件並採取行動。再一次,如果你不需要「停止」?上面的按鈕,你可能不需要在這裏觀察第二個。 (如果你使用它,請注意參數stopApp返回無形給調用者。)

function(input, output, session) { 
    output$ui1 <- renderUI({ 
    selectInput("dataset", "firstValue", choices = c("first", "second", "third")) 
    }) 
    output$ui2 <- renderUI({ 
    actionButton("doIt", class="btn-primary", "change") 
    }) 
    output$ui3 <- renderUI({ 
    textInput("myinput", "catPath", "") 
    }) 
    observeEvent(input$doIt, { 
    catPath <<- paste(input$dataset, "/completed", sep = "") 
    updateTextInput(session, inputId = "myinput", value = catPath) 
    }) 
    observeEvent(input$stopme, { stopApp(catPath); }) 
} 

做這樣的事情newCatPath <- runApp("path/to/dir")

+0

感謝您的回覆! –

+0

如果足夠了,請「接受」答案。 – r2evans

+0

好的,如果你不介意,你能否回答一個問題? 我想在'selectInput'上顯示目錄列表。 'list < - list.dirs(path =「。」,full.names = FALSE,recursive = FALSE)'',output $ ui1 < - renderUI({「select」,「lists」,「lists」 selected = lists [1]) })' 當我運行我的應用程序時,selectInput爲空。 我知道'選擇'在矢量和列表中都是可能的,這裏有什麼問題? –