gpt4 book ai didi

r - 使用 Shiny 选择列、相等、值来按条件过滤

转载 作者:行者123 更新时间:2023-12-05 06:22:13 24 4
gpt4 key购买 nike

我正在创建一个 Shiny 的应用程序,我希望用户能够在其中选择列和条件,从而生成可以使用的 input$COLUMN input$CONDITION input$VALUE过滤数据框。

enter image description here

期望的输出

iris %>% filter(input$COLUMN input$CONDITION input$VALUE) == iris %>% filter(Sepal.Length > 4.7)

为此,我需要为 input$COLUMN 使用 rlang,我需要 eval input$CONDITION 并且我需要input$VALUE 在适当的时候被转换为数字。 (我正在我的 verbatimTextOutput 中尝试这样做)

实现此目标的最佳方法是什么?我认为让整个表达式成为一个在整洁的管道中解析的字符串可能是可行的方法,但我愿意接受其他建议!!

library(shiny)
library(tidyverse)


ui <- fluidPage(

# Sidebar with an input for column
# boolean input
# and value input
sidebarLayout(
sidebarPanel(
fluidRow(column(4, selectInput("COLUMN", "Filter By:", choices = colnames(iris))),
column(4, selectInput("CONDITION", "Boolean", choices = c("==", "!=", ">", "<"))),
column(4, uiOutput("COL_VALUE")))
),

# Show text generated by sidebar
# use text in tidy pipeline to create subsetted dataframe
mainPanel(
verbatimTextOutput("as_text"),
tableOutput("the_data")
)
)
)

# Define server logic required to draw a histogram
server <- function(input, output) {

output$COL_VALUE <- renderUI({
x <- iris %>% select(!!sym(input$COLUMN))
selectInput("VALUE", "Value", choices = x)
})

filtering_string <- reactive ({
paste0("!!sym(", input$COLUMN, ") ", input$CONDITION, " ", input$VALUE)
})

output$as_text <- renderText({
filtering_string()
})


output$the_data <- renderTable({
iris %>%
eval(parse(text = filtering_string()))
})
}

# Run the application
shinyApp(ui = ui, server = server)


最佳答案

我不太熟悉 !!sym 但你可以这样做:

  output$the_data <- renderTable({

# To hide error when no value is selected
if (input$VALUE == "") {
my_data <- ""
} else {
my_data <- iris %>%
filter(eval(parse(text = paste0(input$COLUMN, input$CONDITION, input$VALUE))))
}

return(my_data)

})

关于r - 使用 Shiny 选择列、相等、值来按条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59360538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com