Select 动态数据帧子集
Select dynamically a dataframe subset
我遇到了问题,无法通过下拉菜单中选择的列对数据框进行动态子集化。基本上,我想让用户决定哪一个将成为 y 轴上的列。
文件global.R:
library(shiny)
library(plotly)
# Cars
data("USArrests")
USArrests$state <- row.names(USArrests)
文件ui.R:
ui <- fluidPage(
fluidRow(
selectInput(inputId = "select_col",
label = tags$h4("Select Column"),
choices = c("Murder", "Assault", "UrbanPop", "Rape"),
selected = "Murder"
),
plotlyOutput("plot")
)
)
文件server.R:
server <- function(input, output) {
output$plot <- renderPlotly({
plot_ly(USArrests,
x = ~state,
y = ~input$select_col, # this works but is not reactive y = ~Murder
type = 'bar')
})
}
最后一个文件是我遇到的问题。它不接受 select_col 下拉菜单中的值作为有效输入 (y = ~input$select_col ).
错误的解决方案:
我想出了这个解决方案,但我不喜欢它。它太冗长了。有更高效的方法吗?
更正 server.R:
server <- function(input, output) {
output$plot <- renderPlotly({
df <- USArrests[c('state', input$select_col)]
names(df) <- c('state', 'to_y')
plot_ly(df,
x = ~state,
y = ~to_y,
type = 'bar')
})
}
一个选项是以编程方式生成公式:
server <- function(input, output) {
output$plot <- renderPlotly({
plot_ly(USArrests,
x = ~state,
y = formula(paste("~", input$select_col)),
type = 'bar')
})
}
我遇到了问题,无法通过下拉菜单中选择的列对数据框进行动态子集化。基本上,我想让用户决定哪一个将成为 y 轴上的列。
文件global.R:
library(shiny)
library(plotly)
# Cars
data("USArrests")
USArrests$state <- row.names(USArrests)
文件ui.R:
ui <- fluidPage(
fluidRow(
selectInput(inputId = "select_col",
label = tags$h4("Select Column"),
choices = c("Murder", "Assault", "UrbanPop", "Rape"),
selected = "Murder"
),
plotlyOutput("plot")
)
)
文件server.R:
server <- function(input, output) {
output$plot <- renderPlotly({
plot_ly(USArrests,
x = ~state,
y = ~input$select_col, # this works but is not reactive y = ~Murder
type = 'bar')
})
}
最后一个文件是我遇到的问题。它不接受 select_col 下拉菜单中的值作为有效输入 (y = ~input$select_col ).
错误的解决方案:
我想出了这个解决方案,但我不喜欢它。它太冗长了。有更高效的方法吗?
更正 server.R:
server <- function(input, output) {
output$plot <- renderPlotly({
df <- USArrests[c('state', input$select_col)]
names(df) <- c('state', 'to_y')
plot_ly(df,
x = ~state,
y = ~to_y,
type = 'bar')
})
}
一个选项是以编程方式生成公式:
server <- function(input, output) {
output$plot <- renderPlotly({
plot_ly(USArrests,
x = ~state,
y = formula(paste("~", input$select_col)),
type = 'bar')
})
}