我在Shiny应用中使用dplyr的filter_
功能过滤数据集。我用try()
围绕评估,以便我能够发现错误。这在某些情况下可以正常工作,例如,使用空的过滤字符串。但是如果过滤字符串包含一个不在data.frame中的变量,则Shiny完全崩溃。
以下面的代码为例 - 如果过滤字符串只是"" Shiny返回错误(如预期的那样)。但如果你包括" z == 1"其中z不存在然后应用程序崩溃(不是预期!)。
library(shiny)
library(dplyr)
testapp <- shinyApp(
ui = bootstrapPage(
numericInput('n', 'Number of obs', 100),
plotOutput('plot'),
uiOutput("whyfail")
),
server = function(input, output) {
output$plot <- renderPlot({ hist(runif(input$n)) })
output$whyfail<-renderUI({
input$n
dat<-data.frame(a=LETTERS[1:5], b=1:5)
xx<-try(filter_(dat, ""), silent = TRUE)# returns an error as expected
#xx<-try(filter_(dat, "z==1"), silent = TRUE) # crashes Shiny
HTML(paste(attr(xx, "class"), collapse = '<br/>'))
})
}
)
runApp(testapp)
我的dplyr版本是0.4.2,闪亮是0.12.1。两个更新:首先,如果我在基础R GUI(不是RStudio)中运行,我不会看到崩溃。此外,如果我没有加载dplyr所有代码运行正常,没有崩溃。我很惊讶代码运行,因为我希望filter_()
依赖于dplyr而Shiny似乎不会导入dplyr或filter_()
)。
但我需要dplyr,我更愿意继续使用RStudio,所以任何帮助都会受到赞赏。
我在Windows 7 v 0.99.446中使用RStudio
不确定放这个的最佳位置。但这似乎是一个真正的错误,正在由RStudio解决,你可以在这个链接中看到https://github.com/rstudio/shiny/issues/879