当用户更改其他输入时,根据当前值更改NumericiInput值
我正在创建一个闪亮的应用程序,以英寸为单位,但希望允许用户将单位更改为厘米。当用户更改单位(在任意方向上)时,我希望数值输入的当前值适当更改。以下是我的想法:当用户更改其他输入时,根据当前值更改NumericiInput值,r,shiny,R,Shiny,我正在创建一个闪亮的应用程序,以英寸为单位,但希望允许用户将单位更改为厘米。当用户更改单位(在任意方向上)时,我希望数值输入的当前值适当更改。以下是我的想法: shinyApp( ui = fluidPage( numericInput("length","Length",1), radioButtons("units", "Units", c(Inches="inches", Centimeters="cms")) ), server = function(inpu
shinyApp(
ui = fluidPage(
numericInput("length","Length",1),
radioButtons("units", "Units", c(Inches="inches", Centimeters="cms"))
),
server = function(input,output,session) {
observe({
updateNumericInput(session, inputId="length", value=ifelse(input$units=="cms", input$length*2.54,input$length/2.54))
})
}
)
您将看到,如果运行该应用程序,当前我的代码存在一个无限循环的问题,因为当input$length
发生更改时,observe
再次被调用,input$length
得到更新,并且模式重复
默认情况下,input$length=1
和input$units=“inches”
。我希望发生的是,如果用户更改为input$units=“cms”
,则input$length
更改为2.54
。如果用户随后更改回英寸,则input$length
将更改回1
。此时,如果用户将input$length
更改为2
,然后将input$units
更改为“cms”
,则input$length
应更新为5.08
。我怎样才能使它按预期工作
我不确定如何编程的一个想法是,只有在
input$units
更改时才运行observe
,而不是在input$units
或input$length
更改时运行,但是我当然愿意接受任何解决方案。这是一项隔离的工作:当您不希望输入中的更改触发事件时,您可以隔离包含输入的表达式。尝试:
updateNumericInput(session, inputId="length", value=ifelse(input$units=="cms", isolate(input$length)*2.54,isolate(input$length)/2.54))
尝试将
input$length
封装到isolate
:updateNumericInput(session,inputId=“length”,value=ifelse(input$units==“cms”,isolate(input$length)*2.54,isolate(input$length)/2.54))
我不知道isolate
,但它工作得很好。给我一个答案,我就可以接受。