我正在尝试从用户上传的数据文件中动态填充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
中只显示一个值,它就会失败。
如果上传数据并且如果只有一列是数字则无法控制,我该如何处理这个特定条件呢?
答案 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)