R shinny中的嵌套反应式表达式

R shinny中的嵌套反应式表达式,r,shiny,R,Shiny,我正在尝试创建一个具有以下功能的简单应用程序: 用户将选择“自定义”或“默认” 如果选择“默认”,将显示默认文本。但若选择“自定义”,用户将能够“提交”文本,并显示提交的文本 我已经编写了一些代码来实现这一点,但在“Custom”情况下无法同时处理这两个被动表达式 代码如下: library( shiny ) ui = navbarPage( title = 'Text', tabPanel( 'Custom App', fluidRow( radioButtons( 'rad

我正在尝试创建一个具有以下功能的简单应用程序:

用户将选择“自定义”或“默认”

如果选择“默认”,将显示默认文本。但若选择“自定义”,用户将能够“提交”文本,并显示提交的文本

我已经编写了一些代码来实现这一点,但在“Custom”情况下无法同时处理这两个被动表达式

代码如下:

library( shiny )

ui = navbarPage(

title = 'Text',

tabPanel(

'Custom App',

fluidRow(


  radioButtons( 'radio', 'Select Action', choices = list( 'Default' = 'Default', 'Custom' = 'Custom' ),

                selected = 'Default', inline = T ),

  column( 6, textInput( 'text_given', label = 'Enter Text', value = '' ) ),

  actionButton( 'submit_button', 'Submit' ),

  textOutput( text )

  )

)

)

server = function( input, output, session ){

main = reactive({

selected_action = input$radio

  if( selected_action == 'Default' ){

    text_to_show = 'Default Text'

  } else{

    dataInput = eventReactive( input$submit_button,{

      text_to_show = input$text_given

    })

 }

 return( list( 'text_output' = text_to_show ) )

})

output$text = renderText( main()$text_output )

}

shinyApp( ui = ui, server = server )

没有必要把你的反动剂放在窝里。您应该在被动外部创建您的reactiveExpression,并从被动内部引用该对象。我相信这是你想要的,让我知道如果这有帮助

library( shiny )

ui = navbarPage(

  title = 'Text',

  tabPanel(

    'Custom App',

    fluidRow(
      radioButtons( 'radio', 'Select Action', choices = list( 'Default' = 'Default', 'Custom' = 'Custom' ),
                    selected = 'Default', inline = T ),
    column( 6, textInput( 'text_given', label = 'Enter Text', value = '' ) ),
      actionButton( 'submit_button', 'Submit' ),
      textOutput( "text")

    )

  )

)

server = function( input, output, session ){

  submitted_text <- eventReactive(input$submit_button,
                {
                  input$text_given
                })

  main = reactive({
    selected_action = input$radio
    if(selected_action == 'Default' ){
      text_to_show = 'Default Text'
    } 
    else
    {
      text_to_show = submitted_text()
    }
    return(text_to_show)
  })

  output$text = renderText( main() )

}

shinyApp( ui = ui, server = server )
库(闪亮)
ui=navbarPage(
标题='Text',
选项卡面板(
“自定义应用程序”,
fluidRow(
单选按钮(‘单选’、‘选择操作’、选项=列表(‘默认’=‘默认’、‘自定义’=‘自定义’),
所选=默认值,内联=T),
列(6,textInput('text_given',label='Enter text',value=''),
actionButton('submit_button','submit'),
文本输出(“文本”)
)
)
)
服务器=功能(输入、输出、会话){

submitted_text这很好用。谢谢!你能帮忙吗?我想在选择默认值时隐藏文本字段和submit按钮,只想在选择custom时显示它。怎么做?非常感谢!这很好用。唯一的一个小问题是,如果我选择custom,输入文本并提交,转到default,然后选择c返回自定义后,以前输入的文本仍然保留。如果在单击提交后该文本消失,那就太好了。感谢您的帮助。没问题,您可以添加updateTextInput(“text_given”,value=”“)在ObjvEnter中,如果你觉得它有用的话,你能考虑一下投票的结果吗?谢谢!再次感谢。这是可行的。是的,在15的声誉之后。
library( shiny )
library(shinyjs)

ui = navbarPage(

  title = 'Text',

  tabPanel(

    'Custom App',
    useShinyjs(),
    fluidRow(
      radioButtons( 'radio', 'Select Action', choices = list( 'Default' = 'Default', 'Custom' = 'Custom' ),
                    selected = 'Default', inline = T ),
      column( 6, shinyjs::hidden(textInput( 'text_given', label = 'Enter Text', value = '' ) )),
      shinyjs::hidden(actionButton( 'submit_button', 'Submit' )),
      textOutput( "text")

    )

  )

)

server = function( input, output, session ){

  submitted_text <- eventReactive(input$submit_button,
                                  {
                                    input$text_given
                                  })

  observeEvent(input$radio,
               {
                 if(input$radio=='Default')
                 {
                   hide("text_given")
                   hide("submit_button")
                 }
                 else
                 {
                   show("text_given")
                   show("submit_button")
                 }

               })

  main = reactive({
    selected_action = input$radio
    if(selected_action == 'Default' ){
      text_to_show = 'Default Text'
    } 
    else
    {
      text_to_show = submitted_text()
    }
    return(text_to_show)
  })

  output$text = renderText( main() )

}

shinyApp( ui = ui, server = server )