有没有办法从textInput()UI中的其他地方显示价值,而不必server.R像下面那样经历一些非常冗长的东西?
ui.R
library(shiny)
shinyUI(
fluidPage(
textInput('text_in', label = 'Write text here'),
# elsewhere in the UI...
textOutput('text_out')
))
Run Code Online (Sandbox Code Playgroud)
server.R
library(shiny)
shinyServer(function(input, output) {
output$text_out = renderText(input$text_in)
})
Run Code Online (Sandbox Code Playgroud)
对于这个例子来说并不是太糟糕,但是当我需要多次这样做时它会变得非常冗长.我的愿望是收集用户在整个应用程序中输入的所有输入,并在最后将它们编译成一个漂亮的表格,以便他们可以确认所有内容都是正确的.
我已经看到你在使用JavaScript表达式时可以引用输入元素而无需通过服务器conditionalPanel()但是我不确定如何在这个特定实例之外实现它.
Vic*_*orp 13
要访问所有输入,您可以使用reactiveValuesToList服务器端.您可以通过下面的Javascript事件访问输入值(我从@Pork Chop中获取了示例):
library(shiny)
ui <- basicPage(
fluidRow(
column(
width = 6,
textInput('a', 'Text A',"a1"),
textInput('b', 'Text B',"b1"),
textInput('c', 'Text A',"c1"),
textInput('d', 'Text B',"d1"),
textInput('e', 'Text A',"e1"),
textInput('f', 'Text B',"f1")
),
column(
width = 6,
tags$p("Text A :", tags$span(id = "valueA", "")),
tags$script(
"$(document).on('shiny:inputchanged', function(event) {
if (event.name === 'a') {
$('#valueA').text(event.value);
}
});
"
),
tableOutput('show_inputs')
)
)
)
server <- shinyServer(function(input, output, session){
AllInputs <- reactive({
x <- reactiveValuesToList(input)
data.frame(
names = names(x),
values = unlist(x, use.names = FALSE)
)
})
output$show_inputs <- renderTable({
AllInputs()
})
})
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
由于您的总体目标是收集所有用户输入,然后将它们编译成表格,因此我将通过下面的示例向您展示如何实现这一目标。如您所见,所有input变量都可以通过名称访问server。我将它们保留在反应式中,以防万一您需要它进行进一步分析或某些renderUI功能。
#rm(list=ls())
library(shiny)
ui <- basicPage(
textInput('a', 'Text A',"a1"),
textInput('b', 'Text B',"b1"),
textInput('c', 'Text A',"c1"),
textInput('d', 'Text B',"d1"),
textInput('e', 'Text A',"e1"),
textInput('f', 'Text B',"f1"),
tableOutput('show_inputs')
)
server <- shinyServer(function(input, output, session){
AllInputs <- reactive({
myvalues <- NULL
for(i in 1:length(names(input))){
myvalues <- as.data.frame(rbind(myvalues,(cbind(names(input)[i],input[[names(input)[i]]]))))
}
names(myvalues) <- c("User Input","Last Value")
myvalues
})
output$show_inputs <- renderTable({
AllInputs()
})
})
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)