Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-嵌套观察者_R_Shiny - Fatal编程技术网

R-嵌套观察者

R-嵌套观察者,r,shiny,R,Shiny,在下面的应用程序中,用户选择一个字母,只要选择器向量不包含该字母,该字母就会附加到他们选择的向量上。用户首先通过selectInput(id=letters)选择一个字母,然后通过另一个selectInput,(id=vec)选择将该字母添加到哪个向量,然后单击应用 当用户单击Apply,observeEvent将检查所选字母是否已存在于所选向量中,并将检查结果存储在rv$valid中rv$valid如果字母重复,则为FALSE;如果字母重复,则为TRUE。如果rv$valid==FALSE(即

在下面的应用程序中,用户选择一个字母,只要选择器向量不包含该字母,该字母就会附加到他们选择的向量上。用户首先通过selectInput(id=
letters
)选择一个字母,然后通过另一个
selectInput
,(id=
vec
)选择将该字母添加到哪个向量,然后单击
应用

当用户单击
Apply
,observeEvent将检查所选字母是否已存在于所选向量中,并将检查结果存储在
rv$valid
rv$valid
如果字母重复,则为
FALSE
;如果字母重复,则为
TRUE
。如果
rv$valid==FALSE
(即该字母是重复的),则会提醒用户选择不同的字母或向量

每次用户更改
input$letter
input$vec
后单击
Apply
并根据该检查值切换警报时,我都希望运行此检查。我该怎么做?我曾尝试在observeEvent中创建一个观察者,该观察者侦听
Apply
按钮,但它没有按预期工作


一个
观察事件
就足够了。请检查以下内容:

library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    selectInput('letter', 'Step1: Choose a letter.', letters),
    selectInput('vec', 'Step 2: Which vector would you like to append this letter to?', c('vec1', 'vec2', 'vec3')),
    actionButton('apply', 'Apply'),
    p(hidden(tags$p(id = 'alert', style = 'color:red;', 'Selected vector already contains this letter. Choose a different vector or letter.'))),
    lapply(c('vec1', 'vec2', 'vec3'), verbatimTextOutput)
  ),

  server = function(input, output) {

    rv <- reactiveValues(vec1 = NULL, vec2 = NULL, vec3 = NULL, valid = FALSE)

    observeEvent(input$apply, {
      rv$valid = !input$letter %in% rv[[input$vec]]
      toggle(id = 'alert', condition = !rv$valid)
      req(rv$valid)
      rv[[input$vec]] = c(rv[[input$vec]], input$letter)
    })

    lapply(c('vec1', 'vec2', 'vec3'), function(x, output, rv) {output[[x]] <- renderPrint(rv[[x]])}, output = output, rv = rv)

  }
)
库(闪亮)
图书馆(shinyjs)
shinyApp(
ui=fluidPage(
useShinyjs(),
选择输入('字母','步骤1:选择字母',字母),
选择输入('vec','Step 2:您希望将此字母附加到哪个向量?',c('vec1','vec2','vec3'),
actionButton(“应用”、“应用”),
p(隐藏(标记$p(id='alert',style='color:red;','所选向量已包含此字母。请选择其他向量或字母)。),
lappy(c('vec1','vec2','vec3'),逐字输出)
),
服务器=功能(输入、输出){

你查过我的答案了吗?
library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    selectInput('letter', 'Step1: Choose a letter.', letters),
    selectInput('vec', 'Step 2: Which vector would you like to append this letter to?', c('vec1', 'vec2', 'vec3')),
    actionButton('apply', 'Apply'),
    hidden(tags$p(id = 'alert', style = 'color:red;', 'Selected vector already contains this letter. Choose a different vector or letter.')),
    lapply(c('vec1', 'vec2', 'vec3'), verbatimTextOutput)
  ),

  server = function(input, output) {

    rv <- reactiveValues(vec1 = NULL, vec2 = NULL, vec3 = NULL, valid = FALSE)

    obs <- observe({

      rv$valid = !input$letter %in% rv[[input$vec]]

      toggle(id = 'alert', condition = !rv$valid)

    })

    observeEvent(input$apply, {

      rv$valid = !input$letter %in% rv[[input$vec]]

      if(!rv$valid) 
        obs$resume()
      else 
        obs$suspend()

    }, ignoreInit = T)

    observeEvent(input$apply, {

      req(rv$valid)

      rv[[input$vec]] = c(rv[[input$vec]], input$letter)
    })

    lapply(c('vec1', 'vec2', 'vec3'), function(x, output, rv) {output[[x]] <- renderPrint(rv[[x]])}, output = output, rv = rv)

  }
)
library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    selectInput('letter', 'Step1: Choose a letter.', letters),
    selectInput('vec', 'Step 2: Which vector would you like to append this letter to?', c('vec1', 'vec2', 'vec3')),
    actionButton('apply', 'Apply'),
    p(hidden(tags$p(id = 'alert', style = 'color:red;', 'Selected vector already contains this letter. Choose a different vector or letter.'))),
    lapply(c('vec1', 'vec2', 'vec3'), verbatimTextOutput)
  ),

  server = function(input, output) {

    rv <- reactiveValues(vec1 = NULL, vec2 = NULL, vec3 = NULL, valid = FALSE)

    observeEvent(input$apply, {
      rv$valid = !input$letter %in% rv[[input$vec]]
      toggle(id = 'alert', condition = !rv$valid)
      req(rv$valid)
      rv[[input$vec]] = c(rv[[input$vec]], input$letter)
    })

    lapply(c('vec1', 'vec2', 'vec3'), function(x, output, rv) {output[[x]] <- renderPrint(rv[[x]])}, output = output, rv = rv)

  }
)