Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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
当用户更改其他输入时,根据当前值更改NumericiInput值_R_Shiny - Fatal编程技术网

当用户更改其他输入时,根据当前值更改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
,但它工作得很好。给我一个答案,我就可以接受。