我有多个动态文本元素。元素的数量由下拉列表确定。我想将每个动态文本元素合并到一个列表中,但是很难。
我尝试创建一个单独的反应性对象来组合项目。
server <- function(input,output) {
#define number of names and dynamic names
output$input_ui1<- renderUI({
num<- as.integer(input$num)
lapply(1:num,
function(i) {
textInput(inputId = paste0("name",i ),
label= paste0("Name",i),
value= "enter name")
})
})
#Names into list
names_list<-NULL
reactive({
for (i in 1:input$num ) {
name<- input[[paste0("name",i)]]
names_list<-c(names_list, name)
}
})
#access first item of list of names
output$test_text<-reactive({
(names_list[1])
})
#access first name
output$test_text2<-reactive({
(input[["name1"]])
})
}
ui<- fluidPage(sidebarLayout(
sidebarPanel(
selectInput("num","select number of names",choices= seq(1, 10, 1)),
uiOutput("input_ui1"),
dateRangeInput("daterange1", "Date range:", start = "2001-01-01", end = "2010-12-31"),
uiOutput("test_text"),
uiOutput("test_text2")
),
mainPanel()
))
shinyApp(ui=ui, server=server)
我的UI中有两个测试文本“ test_test”和“ test_test2”。我的期望是两者都应显示相同的内容,但只有第二个显示的是预期的名字。
答案 0 :(得分:0)
您对reactives
的使用不正确。有关更多信息,请参见tutorial。
#Names into list
names_list<-NULL
reactive({
for (i in 1:input$num ) {
name<- input[[paste0("name",i)]]
names_list<-c(names_list, name)
}
})
发生了什么事
names_list
定义为NULL
reactive
,但它没有分配给任何对象,因此您无法访问它。 names_list
只是值为NULL
的非反应对象。这部分真的很奇怪:
#access first item of list of names
output$test_text<-reactive({
(names_list[1])
})
test_text
是uiOutput
,因此您应该使用renderUI
。
将反应堆分配给names_list
,然后通过names_list()
# Names into list
names_list <- reactive({
lapply(1:input$num, function(i) {
input[[paste0("name",i)]]
})
})
#access first item of list of names
output$test_text <- renderUI( {
names_list()[[1]]
})