4

我有一个带有滑块输入的 Shiny 应用程序,我想根据用户上传的数据集中的最大值设置滑块的最大可能值。最大距离将根据上传的数据集而变化。

这是我正在尝试做的最小工作示例。下面我只是硬编码了 maxdistance 的数字,但在我的代码中它是计算出来的:

library(shiny)

ui <- fluidPage(
  sliderInput("range_one", "Core:", min = 0, max = textOutput("maxdistance"), value = c(0,0))
)

server <- function(input,output) {
   output$maxdistance <- renderText({ 
    maxdistance <- 250
    return(maxdistance)
  })
}

shinyApp(ui=ui,server=server)

我收到以下错误:

Error in max - min : non-numeric argument to binary operator

这是有道理的,因为我要求文本输出,那么如何将此输出作为数字值获取以在 sliderInput() 函数中使用?

4

3 回答 3

4

这是一个例子。

library(shiny)

ui <- shinyUI(fluidPage(

  titlePanel("Example"),

  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30),
      actionButton("change", "Change slider max value")
    ),

    mainPanel(
      plotOutput("distPlot")
    )
  )
))

server <- shinyServer(function(input, output, session) {

  observeEvent(input$change, {
    max = sample(50:100, 1)
    updateSliderInput(session, "bins", max=max)
  })

  output$distPlot <- renderPlot({
    x <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })
})

shinyApp(ui = ui, server = server)
于 2016-09-15T19:17:42.360 回答
1

更改如下,它将起作用:

sliderInput("range_one", "Core:", 
            min = 0, max = as.integer(textOutput("maxdistance")), 
            value = c(0,0))
于 2016-09-15T19:19:27.970 回答
0

这是我在服务器端使用的代码,用于实现原始问题的预期结果,无需操作按钮:

observe({
infile <- input$file # user input file upload
 if(!is.null(infile)) {
  processed <- processed() # list of processed elements returned from earlier reactive({}) function with my app
  processed_data <- processed$processed_data # get the processed data from the list and save as data frame
  maxdistance <- max(processed_data$distance) # calculate the max distance from the processed data
  updateSliderInput(session, "range_one", max=maxdistance) # update the slider called "range_one" based on the maxdistance
  }

})

这允许应用程序在上传文件之前使用默认的最大滑块值。用户上传文件后,将处理数据并更新滑块。

于 2016-09-21T05:16:35.493 回答