R 闪亮-如何有条件地更新反应或反应值?
我试图用一些ifelse条件更新一个值 例如,在下面的代码中,我只想在被动“decim_factor”改变其值时更新被动“乘数”,而不是只更新它。我尝试使用带有“decim_factor”的observeEvent作为eventExpr,但没有成功R 闪亮-如何有条件地更新反应或反应值?,r,if-statement,shiny,R,If Statement,Shiny,我试图用一些ifelse条件更新一个值 例如,在下面的代码中,我只想在被动“decim_factor”改变其值时更新被动“乘数”,而不是只更新它。我尝试使用带有“decim_factor”的observeEvent作为eventExpr,但没有成功 library(shiny) rm(list = ls()) ui <- shinyUI(pageWithSidebar( headerPanel("Click the button"), sidebarPanel( nume
library(shiny)
rm(list = ls())
ui <- shinyUI(pageWithSidebar(
headerPanel("Click the button"),
sidebarPanel(
numericInput("index","Numeric Input",1),
p("This is the criteria to change the decim_factor depending on numericInput"),
br(),
p(" num_input >= 20 - decim_factor=3"),
p("20 > num_input >= 10 - decim_factor=2"),
p("10 > num_input - decim_factor=1")
),
mainPanel(
verbatimTextOutput("decim"),
verbatimTextOutput("multip")
)
))
server <- shinyServer(function(input, output) {
decim_factor <- reactive({
num_input <- input$index
if(num_input>=20) {decim_factor <- 3}
else if(10<=num_input & num_input<20) {decim_factor <- 2}
else decim_factor <- 1
as.numeric(decim_factor)
})
#I was trying to calculte the 'multiplier' only if 'decim_factor' changes its value
#and not if it is updated
#
#I tried to use observeEvent, depending on decim_factor() but it didn't work
#If I put the observeEvent function as comment it works, but the multiplier
#updates every time I change the numeric_input
observeEvent(decim_factor(),{
multiplier <- reactive({
decim_factor()*10
})
})
#The outputs come with da Sis.time() just to check if the values are updated
output$decim <- renderText({paste("Decim = ",decim_factor(), ";",Sys.time())})
output$multip <- renderText({paste("Muliplier =", multiplier(), ";",Sys.time())})
})
shinyApp(ui,server)
库(闪亮)
rm(list=ls())
ui即使您的decim_因数
的值没有改变,您也可以在反应式中重置它,这样它就会触发更新乘数
的观察事件。如果要防止出现这种情况,可以执行以下操作:
server <- shinyServer(function(input, output) {
values <- reactiveValues(decim_factor=1,multiplier=10)
observeEvent(input$index,{
num_input <- input$index
if(num_input>=20 & values$decim_factor != 3) {values$decim_factor <- 3}
else if(10<=num_input & num_input<20 & values$decim_factor != 2 ) {values$decim_factor <- 2}
else if(10>num_input & values$decim_factor != 1) values$decim_factor <- 1
})
observeEvent(values$decim_factor,{
values$multiplier <- values$decim_factor*10
})
output$decim <- renderText({paste("Decim = ",values$decim_factor, ";",Sys.time())})
output$multip <- renderText({paste("Muliplier =", values$multiplier, ";",Sys.time())})
})
server即使您的decim\u因子的值没有改变,您也可以在反应式中重置它,这样它就会触发更新乘数的observeEvent。如果要防止出现这种情况,可以执行以下操作:
server <- shinyServer(function(input, output) {
values <- reactiveValues(decim_factor=1,multiplier=10)
observeEvent(input$index,{
num_input <- input$index
if(num_input>=20 & values$decim_factor != 3) {values$decim_factor <- 3}
else if(10<=num_input & num_input<20 & values$decim_factor != 2 ) {values$decim_factor <- 2}
else if(10>num_input & values$decim_factor != 1) values$decim_factor <- 1
})
observeEvent(values$decim_factor,{
values$multiplier <- values$decim_factor*10
})
output$decim <- renderText({paste("Decim = ",values$decim_factor, ";",Sys.time())})
output$multip <- renderText({paste("Muliplier =", values$multiplier, ";",Sys.time())})
})
server trymultiplier“multiplier trymultiplier”乘数