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

RStudio正常运行的Shiny应用部署后日期筛选结果缺失求助

问题原因

这个问题的根本原因是本地R环境与shinyapps.io服务器的系统区域设置(locale)不一致,导致weekdays()函数返回的星期名称语言存在差异:

  • 本地RStudio环境的时间区域设置为葡萄牙语,weekdays(days)返回葡萄牙语的星期名称,和你当前启用的wk_port2eng$WeekP %in% weeks_inp匹配逻辑适配,能正常对应到周五、周日的英文名称,最终筛选出两条结果。
  • shinyapps.io服务器默认的时间区域设置为英语,weekdays(days)返回英文的星期名称,你当前启用的葡萄牙语匹配逻辑完全无法命中对应值,才会出现仅能匹配到部分值甚至无结果的问题。

修复方案

方案1:统一时间区域设置

在server函数的最开头添加代码,强制指定R会话的时间区域为葡萄牙语,确保weekdays()返回结果和本地一致:

# 适配Windows和Linux系统的葡萄牙语locale配置
if (.Platform$OS.type == "windows") {
  Sys.setlocale("LC_TIME", "Portuguese_Portugal.1252")
} else {
  Sys.setlocale("LC_TIME", "pt_PT.UTF-8")
}

方案2:规避语言依赖(更推荐)

使用lubridate包的wday()函数获取星期的数字编码做匹配,完全不受系统语言影响:

  1. 先在开头的加载包部分添加library(lubridate)
  2. 把data_subset响应式函数中星期匹配的逻辑替换为以下代码:
data_subset <- reactive({
    req(input$daterange1)
    req(input$daterange1[1] <= input$daterange1[2])
    days <- seq(input$daterange1[1], input$daterange1[2], by = 'day')
    Test1 <- dplyr::filter(data(), date1 %in% days)
    # 直接获取星期数字:1=周日,2=周一,…,6=周五,7=周六
    wks_num <- unique(wday(days))
    # 直接对应到英文星期名,无需考虑语言差异
    weeks_ine <- wk_port2eng$WeekE[wks_num]
    meanTest1 <- data() %>%
        group_by(Week = tools::toTitleCase(Week), Category) %>% 
        summarise(mean = mean(time, na.rm = TRUE), .groups = 'drop')
    meanTest <- meanTest1[meanTest1$Week %in% as.character(weeks_ine),]
    meanTest
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:24:03