[英]Shiny: Use input$value containing column names within a lapply function to extract columns from list dataframes
我正在开发一个 shiny 应用程序,其中包含一个数据帧列表( table_list
),下面是来自该应用程序的反应式 function 分配。 有一个输入值input$column_names
是与table_list
中的列名相对应的列名列表。 我想使用列名在lapply()
function 中反应性地 select 这些列。 以下是我失败的尝试。
Selected_column <- reactive({
req(table_list())
lapply(table_list, function(DT){
DT$input$column_name
})
})
DT$input$column_name
行返回 NULL 值。 所以我的问题是,如何根据列名输入 select 给定列表 dataframe 的列?
这并不特定于 shiny。 要从名称存储在变量中的 dataframe(或list
或...)中访问或提取列,您必须使用[[
而不是$
。
有关更多信息,请参见例如括号 [] 和双括号 [[]] 之间的区别,用于访问列表或 dataframe 的元素
column_name <- "mpg"
# Does not work
mtcars$column_name
#> NULL
# Works
mtcars[[column_name]]
#> [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
#> [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
#> [31] 15.0 21.4
以及基于您提供的代码段的最小 shiny 应用程序:
library(shiny)
ui <- fluidPage(
selectInput("column_name", "Select a column:", choices = names(mtcars)),
tableOutput("selected")
)
server <- function(input, output, session) {
table_list <- reactive(
list(
a = mtcars,
b = mtcars
)
)
Selected_column <- reactive({
req(table_list())
lapply(table_list(), function(DT) {
DT[[input$column_name]]
})
})
output$selected <- renderTable({
head(rbind.data.frame(Selected_column()))
})
}
shinyApp(ui, server)
#>
#> Listening on http://127.0.0.1:8179
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.