我昨天问了这个问题(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,则宽度一起作用了,因此我的代码必须可以正常运行。也许我缺少一些简单的东西?

最佳答案

这可能是updateRadioButtons函数的错误。如果未设置selected,则将其替换为首选。我猜这会导致错误,如果选择列表为数字。

要解决您的问题,您可以使用as.character将您的选择转换为字符,也可以将selected设置为随机字符串,例如""

使用as.character可能会更好,因为这样您会自动选择第一个选择。

08-25 00:52