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

Shiny App未获取Year输入问题求助:按年份生成词云失败

问题分析与修复方案

我一眼就看到了问题的核心——你在过滤年份数据后,并没有使用过滤后的结果生成词云,还是直接用了原始的NYT_tokens_freq数据集,所以不管选哪个年份,词云都是基于全量数据生成的,自然不会变化。除此之外还有几个小问题需要一并修正:

具体问题点

  • 核心逻辑错误:filter(Year == input$year)执行后没有将结果保存,后续词云依然调用原数据集
  • 变量名不一致:ui里引用的是NYT_tokens_freq$Year,但server里读入的数据集是NYT_tokens,会导致ui初始化报错
  • 滑块参数矛盾:sliderInput的max=20但value=100,超出范围会触发警告
  • 冗余代码:定义了terms这个reactive对象但完全没用到,可以删掉
  • 词云参数缺失:调用wordcloud时没传入词频列,会默认每个词频率为1,这也是词云显示异常的潜在原因

修复后的完整代码

ui.R

library(shiny)

ui <- fluidPage(
  # App title
  headerPanel("Word Cloud"),
  
  # Sidebar panel for inputs
  sidebarPanel(
    # 动态加载年份选项,避免ui依赖提前加载数据集
    selectInput("year", "Choose a Year:", choices = NULL),
    hr(),
    # 修正滑块参数,调整max值让value在合理范围内
    sliderInput("maximum", "Max. Number of Words", 
                min = 1, max = 100, value = 50)
  ),
  
  # Main panel for displaying outputs
  mainPanel(
    plotOutput("wmplot")
  )
)

server.R

library(shiny)
library(tm)
library(wordcloud)
library(tidyverse)
library(RColorBrewer) # 补充加载brewer.pal依赖的包

# 统一数据集变量名,避免前后不一致
NYT_tokens_freq <- read.csv("NYT_tokens_freq.csv")

server <- function(input, output, session) {
  # 动态更新年份选择框的选项
  updateSelectInput(session, "year", 
                    choices = unique(NYT_tokens_freq$Year),
                    selected = min(NYT_tokens_freq$Year))
  
  # 定义响应式的过滤后数据,年份变化时自动重新计算
  filtered_data <- reactive({
    req(input$year) # 确保年份输入有效后再执行
    NYT_tokens_freq %>% 
      filter(Year == input$year) %>%
      arrange(desc(freq)) # 按词频降序排序,匹配词云的排序逻辑
  })
  
  output$wmplot <- renderPlot({
    data <- filtered_data()
    req(nrow(data) > 0) # 确保过滤后有数据再生成词云
    
    wordcloud(words = data$word, 
              freq = data$freq, # 必须传入词频列,否则词云显示逻辑错误
              scale = c(3, 0.5), # 调整缩放比例让词云显示更合理
              max.words = input$maximum, 
              random.order = FALSE, 
              colors = brewer.pal(5, "Dark2"))
  })
}

额外说明

  1. 加入req()函数确保输入有效后再执行代码,避免空输入导致的报错
  2. 用updateSelectInput动态设置年份选项,让ui代码不依赖外部数据集,提升代码健壮性
  3. 补充了RColorBrewer包的加载,避免brewer.pal函数报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:35:40