在闪亮的 sliderInput() 中过滤数据?
Filtered data inside sliderInput() in shiny?
我有一个 sliderInput() ,我想根据用户输入更改它的最大值。我正在尝试创建一个词云,并且词云的代码正在运行,只是我的滑块需要调整。所以我的数据集看起来像这样:
document term count
1 code 1
1 help 28
1 stupid 4
1 shock 7
2 fire 2
2 fly 9
2 money 1
2 free 3
. . .
. . .
20
我想要的是我在 sliderInput() 函数中的最大值应该自动设置为 selected 文档的最高计数。所以用户可以在不同的文档“1”、“2”、“20”之间 select。基于 selection,最大计数应分配给 sliderInput() 的最大值。在我的示例中:如果 selecting 文档 1 -> 最大值 = 28。如果 selecting 文档 2 -> 最大值 = 9。我有一个过滤函数,我在 server.R.如果我可以在 ui.R 中使用这个函数,我的问题就解决了,但是它不允许使用来自服务器内部人员 ui 的函数。我该如何解决这个问题?
代码ui.R:
# Select document
box(
title = "Document Control",
status = "primary",
solidHeader = TRUE,
width = 4,
selectInput("doc", label="Select Document", choices = c(1:20), selected = 1)
),
# Slider
box(
title = "Frequency Control",
status = "primary",
solidHeader = TRUE,
width = 4,
height = 142,
sliderInput("minFreq", label = "Minimum Frequency", min = 1, max = ... , value = 15)
),
box(
title = "Number Control",
status = "primary",
solidHeader = TRUE,
width = 4,
height = 142,
sliderInput("maxNum", label = "Maximum Number of Words", min = 1, max = 400, value = 150)
),
服务器代码:
filtered <- reactive({
Wcloud.Data.filtered <- Wcloud.Data %>%
filter(document == input$doc)
})
output$plotWcloud <- renderPlot({
wordcloud(words = filtered()$term, freq = filtered()$count,
min.freq = input$minFreq, max.words = input$maxNum, random.order=FALSE,
rot.per=0.35, colors=brewer.pal(8, "Dark2"))
})
sliderInput
在服务器 函数中使用 renderUI
创建。
每次重新加载应用程序时,都会创建一个新数据集,并且滑块会更新 min/max/ 并采用数据的 5 值。
library(shiny)
ui <- fluidPage(
uiOutput("slider")
)
server <- function(input, output) {
output$slider <- renderUI({
data = round(runif(10, 1, 100),2)
sliderInput("sliderInp", label = "Select a value", min = min(data), max = max(data), value = data[5])
})
}
shinyApp(ui, server)
在您的示例中实施将导致:
ui:
# Select document
box(
title = "Document Control",
status = "primary",
solidHeader = TRUE,
width = 4,
selectInput("doc", label="Select Document", choices = c(1:20), selected = 1)
),
# Slider
box(
title = "Frequency Control",
status = "primary",
solidHeader = TRUE,
width = 4,
height = 142,
uiOutput("slider")
),
服务器:
filtered <- reactive({
Wcloud.Data.filtered <- Wcloud.Data %>%
filter(document == input$doc)
})
output$slider <- renderUI({
sliderInput("minFreq", label = "Minimum Frequency", min = min(filtered()), max = max(filtered()), value = 15)
})
output$plotWcloud <- renderPlot({
wordcloud(words = filtered()$term, freq = filtered()$count,
min.freq = input$minFreq, max.words = input$maxNum, random.order=FALSE,
rot.per=0.35, colors=brewer.pal(8, "Dark2"))
})
我有一个 sliderInput() ,我想根据用户输入更改它的最大值。我正在尝试创建一个词云,并且词云的代码正在运行,只是我的滑块需要调整。所以我的数据集看起来像这样:
document term count
1 code 1
1 help 28
1 stupid 4
1 shock 7
2 fire 2
2 fly 9
2 money 1
2 free 3
. . .
. . .
20
我想要的是我在 sliderInput() 函数中的最大值应该自动设置为 selected 文档的最高计数。所以用户可以在不同的文档“1”、“2”、“20”之间 select。基于 selection,最大计数应分配给 sliderInput() 的最大值。在我的示例中:如果 selecting 文档 1 -> 最大值 = 28。如果 selecting 文档 2 -> 最大值 = 9。我有一个过滤函数,我在 server.R.如果我可以在 ui.R 中使用这个函数,我的问题就解决了,但是它不允许使用来自服务器内部人员 ui 的函数。我该如何解决这个问题?
代码ui.R:
# Select document
box(
title = "Document Control",
status = "primary",
solidHeader = TRUE,
width = 4,
selectInput("doc", label="Select Document", choices = c(1:20), selected = 1)
),
# Slider
box(
title = "Frequency Control",
status = "primary",
solidHeader = TRUE,
width = 4,
height = 142,
sliderInput("minFreq", label = "Minimum Frequency", min = 1, max = ... , value = 15)
),
box(
title = "Number Control",
status = "primary",
solidHeader = TRUE,
width = 4,
height = 142,
sliderInput("maxNum", label = "Maximum Number of Words", min = 1, max = 400, value = 150)
),
服务器代码:
filtered <- reactive({
Wcloud.Data.filtered <- Wcloud.Data %>%
filter(document == input$doc)
})
output$plotWcloud <- renderPlot({
wordcloud(words = filtered()$term, freq = filtered()$count,
min.freq = input$minFreq, max.words = input$maxNum, random.order=FALSE,
rot.per=0.35, colors=brewer.pal(8, "Dark2"))
})
sliderInput
在服务器 函数中使用 renderUI
创建。
每次重新加载应用程序时,都会创建一个新数据集,并且滑块会更新 min/max/ 并采用数据的 5 值。
library(shiny)
ui <- fluidPage(
uiOutput("slider")
)
server <- function(input, output) {
output$slider <- renderUI({
data = round(runif(10, 1, 100),2)
sliderInput("sliderInp", label = "Select a value", min = min(data), max = max(data), value = data[5])
})
}
shinyApp(ui, server)
在您的示例中实施将导致:
ui:
# Select document
box(
title = "Document Control",
status = "primary",
solidHeader = TRUE,
width = 4,
selectInput("doc", label="Select Document", choices = c(1:20), selected = 1)
),
# Slider
box(
title = "Frequency Control",
status = "primary",
solidHeader = TRUE,
width = 4,
height = 142,
uiOutput("slider")
),
服务器:
filtered <- reactive({
Wcloud.Data.filtered <- Wcloud.Data %>%
filter(document == input$doc)
})
output$slider <- renderUI({
sliderInput("minFreq", label = "Minimum Frequency", min = min(filtered()), max = max(filtered()), value = 15)
})
output$plotWcloud <- renderPlot({
wordcloud(words = filtered()$term, freq = filtered()$count,
min.freq = input$minFreq, max.words = input$maxNum, random.order=FALSE,
rot.per=0.35, colors=brewer.pal(8, "Dark2"))
})