【问题标题】:How to set NULL to reactive within other reactive?如何在其他反应式中将 NULL 设置为反应式?
【发布时间】:2021-05-01 04:37:27
【问题描述】:

单击按钮时,我需要将 NULL 设置为 reactive。我想知道是否可以将 NULL 设置为 reactive,它位于另一个 reactive 中 - 更准确地说是让第二个 reactive 返回 NULL。 在下面的示例中,data(作为模块参数)作为响应式从其他模块传递。

module_server <- function(id, data){
  moduleServer(
    id,
    function(input, output, session) {
      ns <- NS(id)

# 1st reactive
reactive1 <-reactive(data())

reactive1(NULL)

# more code...

如您所见,我尝试将 NULL 设置为 reactive1 但它不起作用。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    你想在满足条件时给它一个 NULL 值吗?例如

    reactive1 <- reactive({
     if(condition is met){
      data()
     } else {
      return(NULL)
     }
    

    【讨论】:

    • 否,例如当点击按钮时将 NULL 设置为 reactive
    • 点击按钮会创建条件吗?所以你可以使用if(input$button &gt; 0) 例如。
    【解决方案2】:

    这就是 Winston Chang 所说的“捕捉 NULL”。 James 的代码将起作用,但是,如果您在开始时捕获 null,那么如果不满足初始条件,则任何依赖于响应式的内容也将为 null。例如,如果下面示例中的r0null,那么r1 也将是null。请注意,您不必将r1(或r0)显式设置为null。我个人的方法是这样做的:

    r0<- shiny::reactive({
      if(!is.null(input$blah)){
    
        #do something here
    
      }
    })
    
    r1<- shiny::reactive({
      if(!is.null(r0())){
        #do some other thing
      }
    })
    

    【讨论】:

    • return(NULL) 的选项似乎没问题,但我更多地考虑将 NULL 设置为反应性,例如当我单击一个按钮时。所以在reactiveValues的情况下我会像reactiveFunction$foo &lt;-NULL那样做某事,在简单的reactive的情况下我不能做同样的事情,例如reactiveFunction({return(NULL}) 不起作用。
    • 如果您想在单击按钮时将 reactiveValue 设为 NULL,请在按钮周围使用 observeEvent 并将您的反应数据值存储在 reactiveValues 列表中。 IE。 rv&lt;- reactiveValues(), rv$blah&lt;- 1, observeEvent(input$btn, {rv$blah&lt;- NULL})
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2019-03-27
    • 2018-11-18
    • 1970-01-01
    • 2020-04-03
    • 2020-04-11
    • 2020-12-22
    • 1970-01-01
    相关资源
    最近更新 更多