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

snotelr包snotel_download函数报错:non-character argument求助

SNOTEL数据下载报错:non-character argument in strsplit

我长期使用snotelr包的snotel_download()函数获取SNOTEL数据,一直正常。但在R 4.3.3环境中运行以下代码时:

library(snotelr)
df <- snotel_download(site_id = c(429,1287), internal = TRUE)

收到错误提示:

Error in strsplit(df$site_name, "(") : non-character argument

已经更新到snotelr最新版本,问题仍存在,求技术帮助。


可行解决方案

1. 绕开包内部处理,手动读取数据

错误根源是包内部尝试对非字符类型的site_name列执行strsplit。可以先下载原始CSV文件,再手动读取并修正类型:

# 下载CSV文件到本地(不直接加载到内存)
snotel_download(site_id = c(429,1287), internal = FALSE)
# 读取每个站点的CSV,确保字符串不自动转为因子
df_429 <- read.csv("429.csv", stringsAsFactors = FALSE)
df_1287 <- read.csv("1287.csv", stringsAsFactors = FALSE)
# 合并多个站点的数据
df <- rbind(df_429, df_1287)
# 按需强制转换site_name为字符型
df$site_name <- as.character(df$site_name)

2. 临时修改包函数逻辑

用trace()工具给包内部代码插入类型转换步骤,避开错误:

# 先查看snotel_download的函数代码,找到调用strsplit的位置
body(snotel_download)
# 假设strsplit在第X行,在它前面插入类型转换(替换X为实际行号)
trace("snotel_download", quote({
  df$site_name <- as.character(df$site_name)
}), at = X)
# 重新运行下载代码
df <- snotel_download(site_id = c(429,1287), internal = TRUE)
# 恢复原函数逻辑
untrace("snotel_download")

3. 排查数据源格式变化

SNOTEL官网可能调整了数据返回格式,导致包解析失效。直接访问目标站点的CSV下载链接,检查site_name列是否存在、内容是否为字符串类型。如果数据源本身返回的site_name是缺失值或非字符内容,需要针对性处理。

4. 反馈问题给包开发者

如果上述方法都无效,说明包与R 4.3.3存在兼容性问题,或者官网数据格式更新导致包逻辑过时。可以在snotelr的代码仓库提交Issue,附上你的R版本、包版本、报错信息和测试代码,请求开发者修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:37:14