背景:私は、MySQLデータベースとインターフェースするダッシュボードを構築しています。ユーザは、データベースからデータを引き出して「送信」をクリックし、データをggvis
とプロットする粗いフィルタを指定すると、ユーザは細かいフィルタで再生し、プロットされるデータのサブセットに影響を及ぼすことができる。これらのファインフィルタは、データベースから取得したデータに依存するため、uiOutput
/renderUI
を使用してデータから生成します。ggvisプロットより前のUIを更新R Shiny
問題:私の挑戦は、私はUIは、プロットが更新され前のデータに基づいて更新することにしたいということです。そうしないと、古いデータセットの細かいフィルタが新しいデータに適用され、プロット時にエラーが発生します。
例:次の例では、mtcars
を使用して問題を再現しています。エラーを表示するには、4シリンダーを選択して[Submit]をクリックし、6シリンダーを選択して[Submit]をもう一度クリックします。この場合、4シリンダファインフィルタを6シリンダデータセットに適用すると、1点のみが返され、ggvis
にスムーザを適用しようとするとエラーが発生します。私と同じエラーではありませんが、十分に近いです。
library(shiny)
library(dplyr)
library(ggvis)
ui <- fluidPage(
headerPanel("Example"),
sidebarPanel(
h2("Course Filter:"),
selectInput("cyl_input", "Cylinders", c(4, 6)),
actionButton("submit", "Submit"),
conditionalPanel(condition = "input.submit > 0",
h2("Fine Filter: "),
uiOutput("mpg_input")
)
),
mainPanel(
ggvisOutput("mtcars_plot")
)
)
server <- function(input, output) {
mycars <- eventReactive(input$submit, {
filter(mtcars, cyl == input$cyl_input)
})
output$mpg_input <- renderUI({
mpg_range <- range(mycars()$mpg)
sliderInput("mpg_input", "MPG: ",
min = mpg_range[1], max = mpg_range[2],
value = mpg_range,
step = 0.1)
})
observe({
if (!is.null(input$mpg_input)) {
mycars() %>%
filter(mpg >= input$mpg_input[1],
mpg <= input$mpg_input[2]) %>%
ggvis(~mpg, ~wt) %>%
layer_points() %>%
layer_smooths() %>%
bind_shiny("mtcars_plot")
}
})
}
shinyApp(ui = ui, server = server)
この質問に似ていますが、返信はありません:http://stackoverflow.com/questions/24010346/priority-value-in-reactive-like-in-observe-r-shiny –
それはあなたが ' shinyjs :: delay() ' – Dambo