在R Shiny app中的selectInput中只显示一个值

时间:2017-03-29 16:13:06

标签: r reactive-programming shiny

我正在尝试从用户上传的数据文件中动态填充selectInput的值。 selectInput必须仅包含数字列。

以下是server.R

的代码段
...
idx <- sapply(data.file, is.numeric)
numeric_columns <- data.file[, idx]
factor_columns <- data.file[, !idx]

updateSelectInput(session, "bar_x", "Select1", choices = names(numeric_columns))
updateSelectInput(session, "bar_y", "Select2", choices = names(factor_columns))
...

对应的ui.r

 ...
 selectInput("bar_x", "Select1", choices = NULL),
 selectInput("bar_y", "Select2", choices = NULL)
 ...

只要在任何下拉列表中有多个值,代码就可以正常工作。但是,只要遇到selectInput中只显示一个值,它就会失败。

如果上传数据并且如果只有一列是数字则无法控制,我该如何处理这个特定条件呢?

2 个答案:

答案 0 :(得分:1)

信息:OP修改了代码以使错误可重现。 要解决您的问题,请使用public void fetchGet(String uri) { HttpGet getRequest = new HttpGet(uri); HttpClient client = HttpClientBuilder.create().build(); try { response = client.execute(requestBase); } catch (IOException e) { e.printStackTrace(); } finally { requestBase.abort(); } } 您通过对val2 <- val[,idx, drop = FALSE]进行了子集来删除列名称。 为避免这种情况,请使用data.frame();见Keep column name when select one column from a data frame/matrix in R

drop = FALSE

答案 1 :(得分:0)

看来,在2019年,这个问题仍然存在。我看到的问题是,当下拉列表中只有一个选项时,将显示列名而不是一个选项。

这似乎只是一个图形问题,因为查询selectInput元素的值会返回正确的基础数据。

我无法弄清楚为什么会出现此问题,但是解决此错误的一种简单方法是简单地更改列的名称,以使其看起来像列表中的第一个元素。 / p>

library(shiny)

ui <- fluidPage(
  selectInput("siExample",
    label = "Example Choices",
    choices = list("Loading...")),
)

server <- function(input, output, session) {
  # load some choices into a single column data frame
  sampleSet <- data.frame(Example = c("test value"))

  # rename the set if there is only one value
  if (length(sampleSet$Example) == 1) {

    # This should only be done on a copy of your original data,
    # you don't want to accidentally mutate your original data set
    names(sampleSet) <- c(sampleSet$Example[1])
  }

  # populate the dropdown with the sampleSet
  updateSelectInput(session,
    "siExample",
    choices = sampleSet)
}

shinyApp(ui = ui, server = server)