2013-03-17 87 views
3

我有設計嵌套輸入/輸出應用程序的問題。 (我自己也嘗試對這個問題發佈到shiny-discuss然而,這將發帖時被自動刪除,爲什麼?)R Shiny嵌套uiOutput錯誤:輸入=> uiOutput => uiOutput =>輸出

我的應用程序可以簡化爲以下步驟:

  1. 通過輸入數據集textarea的。即:輸入$ textarea.in

  2. 加載數據集並顯示導入數據集的名稱列表。用戶可以通過selectInput選擇數據。即:uiOutput(「choosedata」)

  3. 計算所選數據的範圍,然後顯示sliderInput。即:uiOutput(「範圍」)

  4. 最後,計算sliderInput所選值的平方。 i.e.:verbatimTextOutput("range.out「)

那就是:改變進口數據集後,在第4步會發生

input => uiOutput => uiOutput => output 
      (work!)  (work!) (error!) 

錯誤。 更具體地,初始輸入格式是:

Data.A 1 2 3 4 5 
Data.B 6 7 8 9 10 11 

另一輸入格式是:

Data.C 1 3 5 7 
Data.D 2 4 6 8 

步驟2和3會自動地改變,但在步驟4的習慣。 如何解決它?

最佳

注意,在線應用程序和代碼如下:

http://glimmer.rstudio.com/tchsieh/myapp/

#========================= 
#ui.R 
#========================= 
library(shiny) 
shinyUI(pageWithSidebar( 
    headerPanel("Title"), 
    sidebarPanel(
    p("Text Area:"), 
    tags$textarea(id="textarea.in", rows=3, "Data.A 1 2 3 4 5 \nData.B 6 7 8 9 10 11"), 
    uiOutput("choosedata"), 
    uiOutput("range") 
), 

    mainPanel( 
    h2("Test"), 

    h3("Raw Data (step1: work!)"), 
    verbatimTextOutput("textarea.out"), 

    h3("Range of the selected data (step2: work!)"), 
    verbatimTextOutput("summary"), 

    h3("Squared of the selected value (step3:error when change Text area)"), 
    verbatimTextOutput("range.out") 


) 
)) 

#========================= 
#server.R 
#========================= 
library(shiny) 
shinyServer(function(input, output) { 
    loadPaste <- reactive({ 
    text <- input$textarea.in 
    temp <- lapply(readLines(textConnection(text)), function(x) scan(text = x, what='char')) 
    out <- list() 
    out.name <- 0 
    for(i in seq_along(temp)){ 
     out.name[i] <- temp[[i]][1] 
     out[[i]] <- as.numeric(temp[[i]][-1]) 
    } 
    names(out) <- t(data.frame(out.name)) 
    out 
    }) 

    output$textarea.out <- renderPrint({ 
    loadPaste() 
    }) 

    output$choosedata <- renderUI({ 
    dataname <- names(loadPaste()) 
    dataList <- list() 
    for(i in seq_along(dataname)){ 
     dataList[[i]] <- dataname[i] 
    } 
    selectInput("dataset", "Select dataset:", choices = dataList, selected = dataList[1]) 
    }) 

    output$summary <- renderPrint({ 
    out <- loadPaste() 
    id <- which(names(out) == input$dataset) 
    mydata <- out[[id]] 
    range(mydata) 

    }) 

    output$range <- renderUI({ 
    out <- loadPaste() 
    id <- which(names(out) == input$dataset) 
    mydata <- out[[id]] 
    sliderInput("range.in", "Selecte a value in the range of data", min=min(mydata), value=mean(mydata), max=max(mydata), step=diff(range(mydata))/10) 
    }) 

    output$range.out <- renderPrint({ 
    (input$range.in)^2 
    }) 

}) 
+0

該問題已通過在輸出$ choosedata中使用「tryCatch()」並輸出$ range來解決。 – user2179862 2013-03-17 19:48:37

+0

然後,您應該添加該答案作爲答案,以便人們可以更輕鬆地找到答案。 – 2013-03-19 19:31:43

回答

3

這是已被固定在this commit在閃亮的錯誤。感謝報告!

(您反覆嘗試發表討論討論的內容都被Google網上論壇分類爲垃圾郵件,我已發佈垃圾郵件並回復了您最近的帖子,並將您標記爲安全發件人,希望這不會再發生對不便之處!)