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()函数获取星期的数字编码做匹配,完全不受系统语言影响:
- 先在开头的加载包部分添加
library(lubridate) - 把
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
相关产品推荐
相关产品推荐

