You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Shiny开发食谱选单生成购物清单应用的技术咨询

完整可运行的Shiny应用示例

先把你的食谱数据整理成更规范的命名列表(避免污染全局环境,也更符合Shiny的使用习惯),然后搭建Shiny应用:

library(shiny)

# 重构食谱数据为命名列表
recipe_list <- list(
  "The staples" = c("milk", "12 eggs", "cheddar cheese", "sparkling water", "butter", "flour"),
  "Honey Mustard Dijon Chicken" = c("1 lb chicken breast", "1 lb chicken breast", "panko crumbs", "brussel sprouts","shallot","shallot","fresh thyme"),
  "Sheet pan gnocchi" = c("32 oz gnocchi","parmesan cheese","onion","cherry tomatoes","arugulua"),
  "Sheet pan chicken meatballs" = c("panko","6 oz feta","egg", "minced garlic","ground meat/vegan meat", "1 pint cherry tomatoes", "1 can chickpeas")
)

# UI部分
ui <- fluidPage(
  titlePanel("本周食材清单生成器"),
  sidebarLayout(
    sidebarPanel(
      # 食谱选择复选框
      checkboxGroupInput(
        inputId = "selected_recipes",
        label = "选择要做的食谱:",
        choices = names(recipe_list),
        selected = NULL
      )
    ),
    mainPanel(
      # 显示汇总后的食材表格
      tableOutput("grocery_table")
    )
  )
)

# Server部分
server <- function(input, output) {
  # 反应式生成食材汇总表
  grocery_df <- reactive({
    if (length(input$selected_recipes) == 0) {
      return(data.frame(Item = character(), Quantity = integer()))
    }
    # 提取选中食谱的所有食材
    all_ingredients <- unlist(recipe_list[input$selected_recipes])
    # 汇总计数
    table_result <- table(all_ingredients)
    # 转换为dataframe并重命名列
    df <- as.data.frame(table_result, stringsAsFactors = FALSE)
    colnames(df) <- c("Item", "Quantity")
    df
  })
  
  # 输出表格
  output$grocery_table <- renderTable({
    grocery_df()
  })
}

# 运行应用
shinyApp(ui = ui, server = server)

关键部分说明

  • 数据结构优化:把分散的全局对象改成命名列表recipe_list,更便于在Shiny中调用和维护,也避免了全局环境变量的混乱。
  • UI组件:用checkboxGroupInput实现多选食谱,choices直接取列表的名称,自动同步食谱更新。
  • 反应式逻辑:reactive()函数会在用户选择变化时自动重新计算食材汇总表,保证结果实时更新。
  • 空选择处理:当用户没选任何食谱时,返回空表格,避免报错。

新手学习资源建议

  • Shiny官方入门指南:从基础概念到组件使用,一步步带你搭建第一个Shiny应用,是最权威的入门资料。
  • Shiny Cheat Sheet:RStudio出品的速查表,涵盖常用UI组件、反应式函数、输出类型等,适合随时查阅。
  • 基础案例练习:从简单的输入输出案例开始(比如数值输入+图表输出),逐步掌握反应式编程的核心逻辑,再过渡到你的食材汇总场景。

内容的提问来源于stack exchange,提问作者SBL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:54:24