根据无功输出值设置最大 sliderInput 值
Set maximum sliderInput value based on reactive output value
我有一个带有滑块输入的 Shiny 应用程序,我想根据用户上传的数据集中的最大值设置滑块的最大可能值。最大距离将根据上传的数据集而变化。
这是我正在尝试做的最简单的工作示例。下面我只是硬编码最大距离的数字,但在我的代码中它是计算出来的:
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() 函数?
这是一个例子。
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)
改成如下,就可以了:
sliderInput("range_one", "Core:",
min = 0, max = as.integer(textOutput("maxdistance")),
value = c(0,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
}
})
这允许应用在文件上传之前使用默认的最大滑块值。用户上传文件后,将处理数据并更新滑块。
我有一个带有滑块输入的 Shiny 应用程序,我想根据用户上传的数据集中的最大值设置滑块的最大可能值。最大距离将根据上传的数据集而变化。
这是我正在尝试做的最简单的工作示例。下面我只是硬编码最大距离的数字,但在我的代码中它是计算出来的:
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() 函数?
这是一个例子。
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)
改成如下,就可以了:
sliderInput("range_one", "Core:",
min = 0, max = as.integer(textOutput("maxdistance")),
value = c(0,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
}
})
这允许应用在文件上传之前使用默认的最大滑块值。用户上传文件后,将处理数据并更新滑块。