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

How to display input text inside some other text in shiny?

我有一个输入框,每当用户输入他的名字时,输出应该类似于 "hai mr.X, how are you?",其中 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})

})

我认为这个问题需要解决几个问题。首先,您放置服务器逻辑的地方是服务器函数,这样它就可以驱动特定的输出。在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 的控制流,您可以设置一个由事件触发的反应表达式。例如,我们将其命名为 "name."

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

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

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

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