выберите значение чтения столбца вместо значения - PullRequest
0 голосов
/ 03 апреля 2020

Может кто-нибудь объяснить мне это поведение? В R, если список l [[i]] содержит только один элемент, selectizeinput показывает только имя столбца вместо элемента. Он не включает имя столбца, если есть больше элементов.

В консоли поведение также отличается между этими 2:

> 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)

1 Ответ

0 голосов
/ 03 апреля 2020

Я не уверен насчет полной информации о том, почему это происходит, но ваша первая матрица сохранила его значение как 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"

Вы можете решить эту проблему, прочитав первая матрица как вектор, который будет выглядеть следующим образом в пользовательском интерфейсе:

...
selectizeInput("input", "selectize 1", as.vector(l[[1]][,'value']), multiple=TRUE),
...
...