R 如何抑制ShinyApp中的所有Plotly警告
我在ShinyApp中有一个plotly函数,它可以根据用户输入绘制不同的图(直线图、箱线图、violinplots) 由于不同的跟踪采用不同的参数并需要不同的布局,因此我看到了很多警告,我想抑制这些警告。在这种情况下,这没有帮助 似乎在RStudio中工作,但在Shinyapp中不工作,它会将绘图打印到浏览器和RStudio 所描述的解决方法是可行的,但感觉像是黑客攻击,我在这个应用程序中不使用R 如何抑制ShinyApp中的所有Plotly警告,r,shiny,plotly,r-plotly,R,Shiny,Plotly,R Plotly,我在ShinyApp中有一个plotly函数,它可以根据用户输入绘制不同的图(直线图、箱线图、violinplots) 由于不同的跟踪采用不同的参数并需要不同的布局,因此我看到了很多警告,我想抑制这些警告。在这种情况下,这没有帮助 似乎在RStudio中工作,但在Shinyapp中不工作,它会将绘图打印到浏览器和RStudio 所描述的解决方法是可行的,但感觉像是黑客攻击,我在这个应用程序中不使用shinyjs 还有其他想法吗?我如何才能仅抑制有预谋的消息/警告 library(shiny) l
shinyjs
还有其他想法吗?我如何才能仅抑制有预谋的消息/警告
library(shiny)
library(plotly)
suppressPlotlyMessage <- function(p) {
invisible(suppressMessages(suppressWarnings(print(plotly::plotly_build(p)))))
}
plotly_function <- function(df, type, mode, boxpoints) {
p <- plot_ly(text = "text") %>%
add_trace(data = df,
x = ~timestamp, y = ~value,
name = ~names, color = ~I(color),
type = type, mode = mode,
notched = TRUE, jitter = 0.3, boxpoints = boxpoints) %>%
plotly::layout(barmode = 'group',
boxmode = 'group', boxgroupgap=0.4, violinmode = 'group', violingroupgap =0.4,
showlegend = TRUE)
# suppressPlotlyMessage(p)
p
}
## UI ##################
ui <- fluidPage(
checkboxInput("boxplots", "Show Plot as Boxplots"),
conditionalPanel("input.boxplots == true",
checkboxInput("showall", "Show all Points"),
checkboxInput("violins", "Show Plot as Violinplots")
),
actionButton("makewarning", "Create a Warning"),
plotlyOutput("plot")
)
## SERVER ##################
server <- function(input, output, session) {
observeEvent(input$makewarning, {
warning("This warning should be visible")
})
output$plot <- renderPlotly({
df <- data.frame(timestamp = rep(seq.POSIXt(Sys.time(), Sys.time()-1000000, length.out = 50), 2),
value = sin(1:50)*runif(100, 0, 50),
names = c(rep("name1",50), rep("name2",50)),
color = c(rep("#ff8300",50), rep("#5ddd40",50)))
type = "scattergl"; mode = "markers+lines"
boxpoints <- NULL
if (input$boxplots == TRUE) {
df$timestamp <- as.Date(df$timestamp)
mode = NULL
if (input$violins == TRUE) {
type = "violin"
} else {
type = "box"
}
}
if (input$showall) {
boxpoints <- "all"
}
# browser()
# plotly_function(df, type, mode, boxpoints)
# suppressWarnings(plotly_function(df, type, mode, boxpoints))
suppressWarnings(print(plotly_function(df, type, mode, boxpoints)))
# suppressPlotlyMessage(plotly_function(df, type, mode, boxpoints))
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(绘本)
suppressPlotlyMessage“此评论在这种情况下没有帮助。”-为什么没有?它确实解决了问题。当然,你也可以对renderpltly
函数本身做同样的操作(注意它的参数是非标准的,所以你需要做同样的操作)。你介意告诉我如何在该应用程序中使用该注释来抑制警告吗?我没能做到……实际上我只是测试了一下,根本不起作用。我现在有点搞不清楚警告是在哪一点产生的。话虽如此,我还是强烈建议您不要忽略这些警告,因为它们是完全合法的—请修改代码。也就是说,改变绘图代码,以便只传递属于给定跟踪类型的选项,而不是所有选项。您当前的代码是黑客和脆弱的,如果这些警告被升级为错误(它们应该已经出现),可能会在plotly的未来版本中崩溃。我不明白为什么必须修复代码,它工作得很好。Plotly应该忽略给定类型不需要的参数。否则,我将不得不为所有不同的配置编写单独的plotly函数调用,这对我来说似乎不太合适。“plotly应该忽略给定类型不需要的参数。”-不。目前它是这样做的,但这纯粹是偶然的:一般来说,R通常不会忽略无效的函数参数。事实上,plotly确实是一个疏忽,而plotly的作者决定在某个时候解决这个问题是完全合理的。-“否则,我将不得不为所有不同的配置编写单独的plotly函数调用”-这不是必需的。您只需交换移动部件(即单个add_trace
调用,以及可能的布局)。“此注释在这种情况下没有帮助。”-为什么不?它确实解决了问题。当然,你也可以对renderpltly
函数本身做同样的操作(注意它的参数是非标准的,所以你需要做同样的操作)。你介意告诉我如何在该应用程序中使用该注释来抑制警告吗?我没能做到……实际上我只是测试了一下,根本不起作用。我现在有点搞不清楚警告是在哪一点产生的。话虽如此,我还是强烈建议您不要忽略这些警告,因为它们是完全合法的—请修改代码。也就是说,改变绘图代码,以便只传递属于给定跟踪类型的选项,而不是所有选项。您当前的代码是黑客和脆弱的,如果这些警告被升级为错误(它们应该已经出现),可能会在plotly的未来版本中崩溃。我不明白为什么必须修复代码,它工作得很好。Plotly应该忽略给定类型不需要的参数。否则,我将不得不为所有不同的配置编写单独的plotly函数调用,这对我来说似乎不太合适。“plotly应该忽略给定类型不需要的参数。”-不。目前它是这样做的,但这纯粹是偶然的:一般来说,R通常不会忽略无效的函数参数。事实上,plotly确实是一个疏忽,而plotly的作者决定在某个时候解决这个问题是完全合理的。-“否则,我将不得不为所有不同的配置编写单独的plotly函数调用”-这不是必需的。您只需交换移动部件(即单个add_trace
调用,以及可能的布局)。