2016-01-28 114 views
2

昨天我問了這個問題(Update two sets of radiobuttons reactively - shiny),但也許這太亂了,無法得到回覆。我已經剝離下來的問題:爲什麼我不能得到兩套單選按鈕來被動更新:更新兩套單選按鈕 - 閃亮

server.R:

# Create example data 

Wafer <- rep(c(1:3), each=3) 
Length <- c(1,1,2,1,1,1,3,5,1) 
Width <- c(3,1,6,1,1,1,1,1,6) 

dd <- data.frame(Wafer, Length, Width) 

shinyServer(function(input, output, session){ 

# Get Lengths from user input 
a <- eventReactive(input$do, { 
     subset(dd, Wafer %in% input$wafer, select = Length) 
}) 

# Get Widths from user input 
b <- eventReactive(input$do, { 
    subset(dd, Wafer %in% input$wafer, select = Width) 
}) 

#Observe and update first set of radiobuttons based on a(). Does 
#render 
    observe({ 
    z <- a() 
    updateRadioButtons(session, "length", choices = unique(z$Length), inline=TRUE) 
    }) 

#Observe and update second set of radiobuttons based on b(). Does 
#not render  
    observe({ 
    z <- b() 
    updateRadioButtons(session, "width", choices = unique(z$Width), inline=TRUE) 
    }) 

    output$l <- renderDataTable({ a() }) 
    output$w <- renderDataTable({ b() }) 
}) 

ui.R:

library(markdown) 

shinyUI(fluidPage(
    titlePanel("Generic grapher"), 
    sidebarLayout(
    sidebarPanel(

     numericInput("wafer", label = h3("Input wafer ID:"), value = NULL), 

     actionButton("do", "Search wafer"), 
     radioButtons("length", label="Length", choices=""), 
     radioButtons("width", label="Width", choices = "") 

    ), 

    mainPanel(

     dataTableOutput(outputId="l"), 
     dataTableOutput(outputId="w") 

    ))) 
) 

在上面,我只能得到一組單選按鈕來響應(「長度」)。但是,如果我註釋出長度爲observe,那麼寬度就會起作用,所以我的代碼必須單獨運行。也許我錯過了一些簡單的東西?

+0

好吧,所以如果我改變一組單選按鈕是一個selectInput並將相應的updateRadioButtons更改爲updateSelectInput,那麼它就可以工作。我可以使用它,但如果任何人都可以指向正確的方向,我寧願選擇兩組單選按鈕。 – Pete900

+0

可能是一個錯誤,我改變了'updateRadioButtons'的順序,只有第一個工作... – NicE

+0

謝謝尼克。有什麼我可以做的嗎?也許是RStudio頁面或Git的東西?我從來沒有做過這樣的事情,所以不知道正確的禮節。 – Pete900

回答

3

這可能是updateRadioButtons函數的一個缺陷。當沒有設置selected時,它被替換爲第一個選項。我想這會導致一個錯誤,如果選擇列表是數字。

要解決您的問題,您可以將您的選擇轉換爲使用as.character的字符或將selected設置爲隨機字符串,例如""

使用as.character可能會更好,因爲您隨後會自動選擇第一個選擇。

+0

非常好,謝謝你解決這個問題。是否有人將我的潛在錯誤指向某人? – Pete900

+0

是的,你可以在閃亮的github https://github.com/rstudio/shiny/issues中提出問題。我改變了我的答案,結果是當選擇是數字而不是字符時有一個問題。 – NicE

+0

https://github.com/rstudio/shiny/issues/1093 – Pete900