我有一个输入框,每当用户输入他的名字时,输出应该像" hai mr.X,你好吗?"其中X是输入。 这应该仅在第一次输入后出现,并且名称应该从X改为基于输入之后的任何内容。
我的ui.R
和server.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})
})
答案 0 :(得分:5)
我认为在这个问题上有一些事情需要解决。首先,您将放置服务器逻辑的位置(例如它驱动特定输出)位于服务器功能中。在renderText
函数中,您可以放置任何类型的交互式表达式。在您的情况下,这可能是
output$name <- renderText({
if(input$name != ""){
paste0("Oh hai Mr. ", input$name, ". How are you?"
}
})
同时,当名称为空白时,除了不显示之外,没有任何控制流程。相反,您可能需要考虑添加submitButton
或actionButton
,以便人们在完成输入后提交姓名。
以下是如何将其包括在内:
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()
})
这样,人们的姓名只会在他们实际写完姓名后出现,否则他们会收到一条错误消息,提示他们写一些东西。