如何在闪亮的其他文本中显示输入文本?

时间:2017-08-18 16:41:14

标签: r shiny shiny-server

我有一个输入框,每当用户输入他的名字时,输出应该像" hai mr.X,你好吗?"其中X是输入。 这应该仅在第一次输入后出现,并且名称应该从X改为基于输入之后的任何内容。

我的ui.Rserver.R代码如下:

ui.R

library(shiny)
shinyUI(fluidPage(
titlePanel("Employee Assesment"),
sidebarLayout(
sidebarPanel(
  textInput("name","Enter your name","")),
  mainPanel(("About this"),
  textOutput("name")
  )
  )
))

server.R

library(shiny)

shinyServer(function(input, output) {

output$name <- renderText({input$name})

})

1 个答案:

答案 0 :(得分:5)

我认为在这个问题上有一些事情需要解决。首先,您将放置服务器逻辑的位置(例如它驱动特定输出)位于服务器功能中。在renderText函数中,您可以放置​​任何类型的交互式表达式。在您的情况下,这可能是

  output$name <- renderText({
      if(input$name != ""){
        paste0("Oh hai Mr. ", input$name, ". How are you?"
      }
    })

同时,当名称为空白时,除了不显示之外,没有任何控制流程。相反,您可能需要考虑添加submitButtonactionButton,以便人们在完成输入后提交姓名。

以下是如何将其包括在内:

sidebarPanel(
      textInput("name","Enter your name",""),
      actionButton(inputId = "submit",label = "Submit")
)

要访问actionButton的控制流,您可以设置由事件触发的反应式表达式。例如,我们将其称为“#34;名称。&#34;

  name <- eventReactive(input$submit, {
    if(input$name != ""){
      paste0("Oh hai Mr. ", input$name, ". How are you?")
    } else {
      "Please write a name."
    }
  })

然后当我们想要引用它时,我们可以在调用输出$ name时使用它,如下所示:

 output$name <- renderText({
    name()
  })

这样,人们的姓名只会在他们实际写完姓名后出现,否则他们会收到一条错误消息,提示他们写一些东西。