【问题标题】:Save variable output from shinyalert保存来自闪亮警报的变量输出
【发布时间】:2018-05-25 04:30:50
【问题描述】:

我想保存闪亮警告 (https://github.com/daattali/shinyalert) 的输出结果 (TRUE/FALSE)。这篇文章有助于将值打印到控制台 (How to capture shinyalert input field as variable),但我无法将值本身保存为变量。

library(shiny)
library(shinyalert)

ui <- fluidPage(
  useShinyalert()
)


server <- function(input, output) {

  shinyalert(
    title = "Warning",
    text = "Some warning",
    closeOnEsc = FALSE,
    closeOnClickOutside = FALSE,
    type = "warning",
    showConfirmButton = TRUE,
    showCancelButton = TRUE,
    confirmButtonText = "OK",
    cancelButtonText = "Cancel",
    animation = TRUE,
    callbackR = mycallback
  )


}


shinyApp(ui, server)

这将自动打印到控制台闪亮警报的值。将 shinyalert 设置为变量或函数中的值似乎没有任何作用:

  mycallback <- function(value) {
    test_var=value
  }

【问题讨论】:

    标签: shiny shinyjs


    【解决方案1】:

    在这种情况下忘记该函数,只需使用 observeEvent 观察警报,因为可以通过 input$shinyalert 访问回调值。

    alert<-shinyalert(
    title = "Warning",
    text = "Some warning",
    closeOnEsc = FALSE,
    closeOnClickOutside = FALSE,
    type = "warning",
    showConfirmButton = TRUE,
    showCancelButton = TRUE,
    confirmButtonText = "OK",
    cancelButtonText = "Cancel",
    animation = TRUE,
    callbackR = NULL
    )
    
    observeEvent(input$shinyalert,
    value<<-input$shinyalert
    )
    

    注意:我已将 value 变量分配为全局变量,请确保您真正分配它。

    编辑: 这似乎只在应用程序关闭时分配值,因为服务器没有发生任何其他事情。为了弥补这一点,我添加了一个用于测试目的的按钮,因为一旦另一个命令在服务器上通过,就会分配该值。

    observeEvent(input$test,
    print(value)
    )
    

    编辑: 如果我们想在后续语句中使用该值而不首先在服务器中执行任何其他操作,我们将不得不使用 callbackR 函数。

    mycallback<-function(value){
    if(value==T){
      print(value) #commands
    } else if (value==F){
      print(value) #commands
    }
    }
    

    注意:这个包还是比较新的并且有很多错误,例如,如果你尝试将这些模态链接在一起,就像包的作者声称这个包可以做的那样,它就不起作用。

    shinyalert(
    title = "What is your name?", type = "input",
    callbackR = function(value) { shinyalert(paste("Welcome", value)) }
    )
    

    这里是作者描述的链接。 https://deanattali.com/blog/shinyalert-package/

    如此处所述...https://github.com/daattali/shinyalert/issues/14 如果您从 github 安装最新版本,许多这些错误将得到修复。查看与此软件包相关的已报告错误,我们并不是唯一遇到此问题的人。

    【讨论】:

    • 抱歉,如果我完全遗漏了一些东西,但我无法评估“价值”的价值。 observeEvent(input$shinyalert, value
    • @ben 你没有错,请查看所做的编辑。似乎需要在程序中执行下一步才能分配值,可能是错误,也可能是闪亮警报的性质
    • 谢谢@Chabo,另一个问题是缺少 { } the observeEvent 。理想情况下,我希望 shinyalert 的输出在同一个 obsereveEvent 内,以确定后续 if 语句的标准
    • @ben,如果您在下一条语句之前不打算在服务器中执行任何操作,那么我认为我们需要回到函数,因为我们无法将“价值”推出。查看修改
    • @ben 我认为这一切可能只是由于全新软件包中的错误。在 callbackR 函数中使用 If/else,或使用服务器中的其他代码(例如按钮)来推送 input$value,都可以。也许如果你在警报上制作了自己的按钮,你可以反过来监控那些有和观察事件的人,这也应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 2017-12-21
    • 2017-10-20
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2017-03-15
    • 2014-10-11
    相关资源
    最近更新 更多