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

Shinyapps.io部署调用mdy_hms()报错,本地运行正常

Shinyapps.io部署时lubridate时间处理报错:无法将'closure'类型转为character

问题背景

本地运行正常的Shiny项目,部署到Shinyapps.io后出现函数调用错误。项目核心逻辑是读取指定目录下的CSV文件,使用lubridate包的mdy_hms()函数解析时间戳字段。

项目文件结构与代码

目标文件夹结构:

input$dir/
├─ file1.csv
├─ file2.csv
└─ ...

数据处理代码:

files <- list.files(input$dir, pattern = ".csv", full.names = TRUE) %>%
  set_names() %>% 
  map_dfr(read_csv, .id = "file") %>% 
  mutate(datetime = mdy_hms(timestamp),
         date = as.Date(datetime),
         DeployID = as.character(`tag-local-identifier`),
         Latitude = `location-lat`,
         Longitude = `location-long`) %>% 
  distinct(DeployID, datetime, .keep_all = TRUE)

报错信息

Warning: Error in mutate: Problem while computing datetime = mdy_hms(timestamp).
Caused by error in as.character():
cannot coerce type 'closure' to vector of type 'character'

已确认导入的timestamp列是字符(chr)类型,本地运行无异常,怀疑存在函数名掩码问题。

解决方案

直接通过命名空间显式调用lubridate包中的mdy_hms()函数,修改mutate段代码如下:

mutate(datetime = lubridate::mdy_hms(timestamp),
       date = as.Date(datetime),
       DeployID = as.character(`tag-local-identifier`),
       Latitude = `location-lat`,
       Longitude = `location-long`)

原因分析

Shinyapps.io的服务器环境中,可能存在其他已加载的包或自定义函数与mdy_hms重名,导致代码调用的不是lubridate包中的时间解析函数,而是一个闭包(closure)对象,进而触发类型转换错误。显式添加lubridate::前缀可以强制指定函数来源,彻底避免命名冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:07:13