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