如果使用layer_smooths仅选择一个观察时,如何防止Shiny崩溃?

时间:2017-05-05 23:40:10

标签: r shiny ggvis

我已经构建了一个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

0 个答案:

没有答案