我想用shiny
生成一个反应滑块。但是,我猜测图是在评估无功输入之前生成的,错误会在短时间内出现。
当我使用ggplot
代替plot
时,错误为:Asthetics must be either length 1 or the same as the data
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel(
checkboxInput("check", "scale 0 to 30", F),
# here is the reactive slider
uiOutput("slider")
),
mainPanel(
plotOutput("plt")
)
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
output$slider <- renderUI({
sliderInput("inSlider", "Reactive scale",
min = ifelse(input$check == T, 0, 0),
max = ifelse(input$check == T, 30, 100),
value = ifelse(input$check == T, 20, 20))
})
output$plt <- renderPlot({
plot(mtcars$qsec, mtcars$mpg, xlim=c(0,input$inSlider))
})
})
所以我的问题是:我怎样才能避免这个错误?
答案 0 :(得分:1)
将req(input$inSlider)
添加为output$plot
的第一行。
这个构造是在大约一年半之前创建的,正好适合这种情况。
它应该减少困扰Shiny并使程序难以理解的if(!is.null(input$..
的数量。遗憾的是,您在SO或网络上找到的大多数简单示例都没有该构造 - 甚至是if(!is.null..
形式。所以这种情况会不断出现,并伴随着不同的症状。