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

使用SSDM包运行堆叠物种分布模型时遇sort.list(y)错误求助

解决SSDM包load_occ函数中的sort.list报错:'x' must be atomic for 'sort.list'

从你的错误栈信息来看,问题出在load_occ函数将物种列转换为因子类型的过程中:

Occurrences loading Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
Calls: load_occ -> as.factor -> as.factor -> factor -> sort.list

sort.list()只能处理原子类型(比如字符、数值向量),不能处理列表(list)类型。这说明你的物种列(species)在被读入后是列表类型,而非标准的字符/因子向量,导致as.factor()调用失败。

下面是具体的排查和解决步骤:

1. 检查并修复物种列的数据类型

先手动读取你的分布点文件,查看species列的类型:

# 单独读取CSV文件
occ_raw <- read.csv("Final_African_bird_occurrence_rarefied_points.csv", sep = ",")
# 查看species列的结构
str(occ_raw$species)

如果输出显示为List of ...,说明该列确实是列表类型(可能是CSV文件中物种名称包含特殊格式,比如换行、嵌套值,导致read.csv误读为列表)。你可以将其转换为原子向量:

# 将列表转换为字符向量
occ_raw$species <- unlist(occ_raw$species)
# 可选:提前转换为因子(也可以让load_occ自动处理)
occ_raw$species <- as.factor(occ_raw$species)
# 保存修复后的文件(可选,方便后续直接调用)
write.csv(occ_raw, "Fixed_African_bird_occurrence_rarefied_points.csv", row.names = FALSE)

之后用修复后的文件重新调用load_occ即可。

2. 检查stack_modelling的参数错误

除了当前的报错,你的stack_modelling代码里有两个明显的参数错误,建议提前修正,避免后续出现问题:

  • Xcol = "Xcol", Ycol = "Xcol":这两个参数应该对应Occurrences数据框中的坐标列名。根据load_occ的输出规则,坐标列会被重命名为X和Y,所以应该改为Xcol = "X", Ycol = "Y"。
  • Spcol = "Spcol":该参数需要指定Occurrences中的物种列名,也就是你在load_occ中设置的species,所以应该改为Spcol = "species"。

3. 验证子集数据的物种列

你提到用数据子集也会出现相同错误,说明即便是子集里的物种列依然存在非原子类型的问题。按照步骤1的方法检查子集的species列,确认修复后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:04:16