selectizeinput 读取列名而不是值
selectizeinput reading column-name instead of value
有人可以向我解释一下这种行为吗?
在 R 中,如果列表 l[[i]] 只包含一个元素,selectizeinput 只显示列名而不是元素。如果有更多元素,它不包括列名。
在控制台中,这两个行为也不同:
> l[[1]][,'value']
value
"some string"
> l[[2]][,'value2']
[1] "more string" "other string"
library(shiny)
l <- c()
value <- "some string"
id <- "1"
df <- cbind(id,value)
l[[1]] <- df
value2 <- c("more string", "other string")
id2 <- c("2","3")
df2 <- cbind(id2,value2)
l[[2]] <- df2
ui <- fluidPage(
selectizeInput("input", "selectize 1", l[[1]][,'value'], multiple=TRUE),
verbatimTextOutput("out"),
selectizeInput("input2", "selectize 2", l[[2]][,'value2'], multiple=TRUE),
verbatimTextOutput("out2")
)
server <- function(input,output){
output$out <- renderText({
input$input
})
output$out2 <- renderText({
input$input2
})
}
shinyApp(ui = ui, server = server)
我不确定为什么会发生这种情况的全部细节,但您的第一个矩阵将其值存储为 Named chr 而不是 chr,如下所示:
> str(l[[1]][, 'value'])
Named chr "some string"
- attr(*, "names")= chr "value"
> str(l[[2]][, 'value2'])
chr [1:2] "more string" "other string"
您可以通过将第一个矩阵读取为向量来解决此问题,该向量在 ui:
中看起来像这样
...
selectizeInput("input", "selectize 1", as.vector(l[[1]][,'value']), multiple=TRUE),
...
有人可以向我解释一下这种行为吗? 在 R 中,如果列表 l[[i]] 只包含一个元素,selectizeinput 只显示列名而不是元素。如果有更多元素,它不包括列名。
在控制台中,这两个行为也不同:
> l[[1]][,'value']
value
"some string"
> l[[2]][,'value2']
[1] "more string" "other string"
library(shiny)
l <- c()
value <- "some string"
id <- "1"
df <- cbind(id,value)
l[[1]] <- df
value2 <- c("more string", "other string")
id2 <- c("2","3")
df2 <- cbind(id2,value2)
l[[2]] <- df2
ui <- fluidPage(
selectizeInput("input", "selectize 1", l[[1]][,'value'], multiple=TRUE),
verbatimTextOutput("out"),
selectizeInput("input2", "selectize 2", l[[2]][,'value2'], multiple=TRUE),
verbatimTextOutput("out2")
)
server <- function(input,output){
output$out <- renderText({
input$input
})
output$out2 <- renderText({
input$input2
})
}
shinyApp(ui = ui, server = server)
我不确定为什么会发生这种情况的全部细节,但您的第一个矩阵将其值存储为 Named chr 而不是 chr,如下所示:
> str(l[[1]][, 'value'])
Named chr "some string"
- attr(*, "names")= chr "value"
> str(l[[2]][, 'value2'])
chr [1:2] "more string" "other string"
您可以通过将第一个矩阵读取为向量来解决此问题,该向量在 ui:
中看起来像这样...
selectizeInput("input", "selectize 1", as.vector(l[[1]][,'value']), multiple=TRUE),
...