R Shiny with validate:绘图仅在调整大小后刷新 window
R Shiny with validate: Plot only refreshes after resizing window
我正在尝试在 Shiny 中使用 validate(),但每次验证命令发现错误时我都会遇到问题。我正在尝试绘制一些数据,其中偶尔某些数据子类别可能没有任何值(即,如果类别是颜色,您可以 select "green",但有时数据集不会包含类别中的任何行"green")。
只要我正在验证的条件返回为 false,就会正确打印错误消息。但是,当我重新 select 一个新值并更新时,新图仅在我手动调整 window 大小后出现,而不是像通常在我单击 "update" 后出现.
colors = c("green","blue","red")
library(shiny)
ui <- fluidPage(
tabsetPanel(
tabPanel("Info",
selectInput(inputId = "color",label = "color:",
choices = colors,
selected = colors[2],
multiple = FALSE),
actionButton(inputId = "go",
label = "Update"),
plotOutput("plot", width = "100%", height = 700,
brush = brushOpts(id = "plot_brush",fill = "green",clip = FALSE))
)
)
)
server <- function(input, output,session) {
data = eventReactive(input$go, {
var1 = rnorm(20,5)
cat1 = (c(rep("red",10),rep("blue",10)))
data = cbind.data.frame(var1,cat1)
plotdata = data[which(data$cat1 ==isolate(input$color)),]
}
)
output$plot = renderPlot({
validate(
need( (isolate(input$color) %in% c("red","blue")) , "No color of this type " )
)
plotdata = data()
plot(plotdata$var1, col = isolate(input$color))
})
}
shinyApp(ui = ui,server = server)
仅供参考,我使用的是 Shiny 版本 0.13.1,R 版本 3.2.3
问题是 input$color
包含在您的 need
语句中的 isolate
中。所以 need
仍然认为你选择了错误的颜色,因为没有告诉它重新检查 input$color
。如果您将 input$go
添加为 renderPlot
的第一行(就在 validate
之前),我认为它可以满足您的需求。
我正在尝试在 Shiny 中使用 validate(),但每次验证命令发现错误时我都会遇到问题。我正在尝试绘制一些数据,其中偶尔某些数据子类别可能没有任何值(即,如果类别是颜色,您可以 select "green",但有时数据集不会包含类别中的任何行"green")。
只要我正在验证的条件返回为 false,就会正确打印错误消息。但是,当我重新 select 一个新值并更新时,新图仅在我手动调整 window 大小后出现,而不是像通常在我单击 "update" 后出现.
colors = c("green","blue","red")
library(shiny)
ui <- fluidPage(
tabsetPanel(
tabPanel("Info",
selectInput(inputId = "color",label = "color:",
choices = colors,
selected = colors[2],
multiple = FALSE),
actionButton(inputId = "go",
label = "Update"),
plotOutput("plot", width = "100%", height = 700,
brush = brushOpts(id = "plot_brush",fill = "green",clip = FALSE))
)
)
)
server <- function(input, output,session) {
data = eventReactive(input$go, {
var1 = rnorm(20,5)
cat1 = (c(rep("red",10),rep("blue",10)))
data = cbind.data.frame(var1,cat1)
plotdata = data[which(data$cat1 ==isolate(input$color)),]
}
)
output$plot = renderPlot({
validate(
need( (isolate(input$color) %in% c("red","blue")) , "No color of this type " )
)
plotdata = data()
plot(plotdata$var1, col = isolate(input$color))
})
}
shinyApp(ui = ui,server = server)
仅供参考,我使用的是 Shiny 版本 0.13.1,R 版本 3.2.3
问题是 input$color
包含在您的 need
语句中的 isolate
中。所以 need
仍然认为你选择了错误的颜色,因为没有告诉它重新检查 input$color
。如果您将 input$go
添加为 renderPlot
的第一行(就在 validate
之前),我认为它可以满足您的需求。