0
警告メッセージがコンソールに出力されますが、これらの警告がUIに表示されるため、ユーザーはコンソールを見なくても表示できます。R Shiny:UIに出力する警告メッセージ
警告メッセージがコンソールに出力されますが、これらの警告がUIに表示されるため、ユーザーはコンソールを見なくても表示できます。R Shiny:UIに出力する警告メッセージ
tryCatch
を使用して警告オブジェクトを格納できます。 これで、メッセージをUIの任意の場所に置くことができます。一度tryCatch
とせずに他に:
library(shiny)
ui <- fluidPage(
actionButton("btn", "click me")
)
server <- function(input, output)
{
observeEvent(input$btn, {
#x <- (1:3 * 1:2) # this generates a warning
#warning("manually generated warning message")
#mess <- names(last.warning)
a <- tryCatch(warning(Sys.time()), warning=function(w) { w })
mess <- a$message
showNotification(mess)
})
}
runApp(list(ui=ui, server=server))
を取得する、簡単な方法は、それを2回実行することです。
library(shiny)
ui <- fluidPage(
actionButton("btn", "click me")
)
server <- function(input, output)
{
observeEvent(input$btn, {
x <- tryCatch(1:3 * 1:2, warning=function(w) { w })
if (inherits(x, "simpleWarning")) {
mess <- x$message
showNotification(mess)
x <- 1:3 * 1:2
}
print(x)
})
}
runApp(list(ui=ui, server=server))
二度同じ操作を実行することは望ましくない場合は、次のトリック(See this SO thread)
library(shiny)
ui <- fluidPage(
actionButton("btn", "click me")
)
server <- function(input, output)
{
withWarnings <- function(expr) {
myWarnings <- NULL
wHandler <- function(w) {
myWarnings <<- c(myWarnings, list(w))
invokeRestart("muffleWarning")
}
val <- withCallingHandlers(expr, warning = wHandler)
list(value = val, warnings = myWarnings)
}
observeEvent(input$btn, {
x <- withWarnings(1:3 * 1:2)
if (!is.null(x$warnings)) {
for (w in x$warnings) showNotification(w$message)
}
})
}
runApp(list(ui=ui, server=server))
を使用し、私はあなたのコードを実行しようとしましたが、このメッセージました:警告:observeEventHandlerでのエラー:オブジェクトを'last.warning'が見つかりません。 –
本当に。コンソールに警告メッセージが表示されますか? –
ええと、私がactionButtonを押すと、光るアプリが閉じ、その警告がコンソールに表示されます。 –