我正在尝试构建我的第一个 Shiny 应用程序,但一直遇到麻烦,因此希望有人可以提供帮助。我想要做的核心很简单(对于除了我之外的任何人):创建一个下拉列表,用户可以从列表中选择一个数据框,然后所选的 DF 将转换为数据表(来自 DT 包) .
这是我迄今为止所做工作的简化版本:
我的 global.R 中有 2 个数据框。在我的实际代码中,我进行了一些数据整理,以将列等添加到 20 个 csv 文件中,因此我将其设置为全局以保持整洁。
df1 <- data.frame(Name = c("a", "b", "c"),
Parameter = c("pH", "pH", "pH"),
Amount = c(7, 7.5, 6.8),
Violation = c("No", "No", "Yes"))
df2 <- data.frame(Name = c("d", "e", "f"),
Parameter = c("pH", "pH", "pH"),
Amount = c(6.7, 7.2, 7.3),
Violation = c("Yes", "No", "No"))
我的用户界面.R:
shinyUI(fluidPage(
titlePanel("Title"),
fluidRow(
selectInput(inputId = "df_test",
label = "Select DF",
choices = c("DF 1" = "df1",
"DF 2" = "df2"),
selected = "DF 1",
width = "50%"),
DT::dataTableOutput("test_table")
)
))
和我的服务器。R:
shinyServer(function(input, output) {
output$test_table <- DT::renderDataTable({
input$df_test
})
})
现在我收到一个错误,提示“‘数据’必须是二维的”,但我很确定即使我解决了这个问题,它也不会起作用。我不知道我做错了什么这里。有人对如何修复此错误并设置 selectInput 下拉列表以实际从数据帧列表中进行选择有建议吗?抱歉,这是一个初学者问题,但我真的很挣扎。提前感谢您的帮助。
最佳答案
我们需要从字符串中返回对象的值,即get
(使用OP的原始语法)
ui = fluidPage(
titlePanel("Title"),
fluidRow(
selectInput(inputId = "df_test",
label = "Select DF",
choices = c("DF 1" = "df1",
"DF 2" = "df2"),
selected = "DF 1",
width = "50%"),
DT::dataTableOutput("test_table")
)
)
server <- function(input, output) {
output$test_table <- DT::renderDataTable({
get(input$df_test)
})
}
shinyApp(ui, server)
-输出
关于r - 如何使 Shiny 的 selectInput 下拉列表在多个数据帧之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68763324/