mlr3spatial构建空间任务报错:元素重复及参数功能疑问
R空间机器学习:
as_task_regr_st参数解析与列名重复错误解决 核心参数功能说明
coordinate_names
指定数据中存储空间坐标信息的列名。如果是sf格式的空间对象,通常填"geometry";如果是普通数据框(比如带单独的经度、纬度列),可以指定c("lon", "lat")这类列名。这个参数的作用是告诉mlr3spatial:哪部分数据是空间坐标,用于后续的空间交叉验证、空间特征计算等专属逻辑。
coords_as_features
控制坐标是否作为模型训练的特征变量:
TRUE:坐标会被当作普通输入特征,参与模型的训练拟合FALSE:坐标仅作为空间任务的元数据(比如用来构建空间索引),不会被纳入特征矩阵
错误原因解析
你碰到的「列名必须唯一」问题,根源是terra::extract(bind=TRUE)会自动给输出添加X、Y列(存储提取点的坐标),而你的trainDat又是sf对象(自带geometry列)。当你设置coordinate_names = "geometry"时,mlr3spatial会自动从geometry列解析出X、Y坐标列,这就和extract生成的X、Y列重名了,直接触发列名重复的错误。
解决方案
方案1:移除重复坐标列
如果X、Y列和geometry列的坐标完全一致,直接删除这两列即可,同时根据需求设置coords_as_features:
task <- as_task_regr_st( x = subset(trainDat, select = (-c(X,Y))), target = "temp", coords_as_features = TRUE )
方案2:重命名重复列保留原始数据
如果需要保留X、Y列,先修改它们的列名避免冲突,再设置coords_as_features = FALSE让坐标仅作为空间元数据:
colnames(trainDat)[colnames(trainDat) == "X"] <- "lon" colnames(trainDat)[colnames(trainDat) == "Y"] <- "lat" task <- as_task_regr_st( x = trainDat, target = "temp", coords_as_features = FALSE ) task
内容的提问来源于stack exchange,提问作者Breeze
相关产品推荐
相关产品推荐

