我已经构建了一个Shiny App,可以使用ggvis
生成交互式图表。我添加了sliderInput
功能来过滤我的数据,并且相应地更改了绘图。我还向layer_smooths
添加了ggvis
来电,当用户更改sliderInput
并过滤数据时,趋势线会动态调整。
不幸的是,当数据被过滤时,只剩下一个观察结果,因此无法创建趋势线和闪亮的崩溃。有没有办法让我增加layer_smooths
调用,这样如果数据集中只有一个观察(过滤后),则忽略对layer_smoooths
的调用?如果我删除了对layer_smooths
的调用,当只有一个观察值时,Shiny不会崩溃,但我非常想保留趋势线功能。
我重新创建了一些示例Shiny代码来显示问题。启动应用程序后,如果您过滤了信息中心上的mpg
滑块,直到只剩下一个观察点,那么应用程序就会崩溃。
library(shiny)
library(ggvis)
library(dplyr)
data(mtcars)
server <- function(input, output) {
example <- reactive({
# set initial values
minmpg <- input$m[1]
maxmpg <- input$m[2]
# apply filters
mpg_example <- mtcars %>%
filter(
mpg >= minmpg,
mpg <= maxmpg)
mpg_example <- as.data.frame(mpg_example)})
vis <- reactive({
example %>%
ggvis(x = ~mpg, y = ~disp) %>%
layer_points(size := 50) %>%
layer_smooths(span = 1.5)
})
vis %>% bind_shiny("distPlot")
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("m", "mpg", 10,
33, value = c(10, 33), step = 1)),
mainPanel(ggvisOutput("distPlot"))
)
)
shinyApp(ui = ui, server = server)
修改
看到的错误(使用截断的堆栈跟踪):
Warning: Error in predLoess: NA/NaN/Inf in foreign function call (arg 5)
Stack trace (innermost first):
114: predLoess
113: predict.loess
112: stats::predict
111: pred_grid.loess
110: pred_grid
109: compute_model_prediction.data.frame
108: compute_model_prediction
Warning: Error in predLoess: NA/NaN/Inf in foreign function call (arg 5)
Stack trace (innermost first):
62: <Anonymous>
61: stop
60: r_spec
59: observerFunc