R语言使用writeRaster保存data.frame为csv时报错如何解决
报错原因
- 函数使用场景不匹配:
writeRaster是栅格处理相关包(raster/terra/dismo)提供的函数,仅支持接收栅格类对象作为第一个输入参数,你传入的数据集是data.frame类型,自然找不到对应适配方法 - 变量名拼写错误:你前面代码清理后得到的数据集变量名为
sp,调用writeRaster时写的是不存在的变量spg,就算函数适配data.frame也会先报对象不存在的错误
解决方案
根据你的实际需求选择对应方案即可:
场景1:仅需要保存当前的点数据为普通csv表格
直接使用R内置的write.csv函数即可,不需要调用writeRaster,替换你最后一行代码为:
write.csv(sp, "zzz.csv", row.names = FALSE)
参数row.names = FALSE可以避免输出额外的行号列,最终得到的csv会包含lon、lat、species三列点数据。
场景2:需要将点数据转为栅格后保存为栅格格式的csv
你需要先将data.frame格式的点数据转为栅格对象,再调用writeRaster,完整示例代码如下:
library(dismo) library(raster) # 原有数据处理代码 sp <- gbif("Neurergus ","kaiseri") sp <- sp[sp$basisOfRecord %in% c("HUMAN_OBSERVATION", "OBSERVATION", "PRESERVED_SPECIMEN"), c("lon", "lat")] sp$species <- 1 sp <- na.omit(sp) # 新增:创建栅格模板,分辨率res可根据你的研究需求调整 r <- raster(extent(sp), res = 0.1, crs = "+proj=longlat +datum=WGS84") # 新增:将点数据栅格化,聚合规则fun可根据需求调整为count/mean等 sp_raster <- rasterize(sp[, c("lon", "lat")], r, field = sp$species, fun = sum) # 保存栅格为csv格式 writeRaster(sp_raster, "zzz.csv")
如果需要输出栅格每个像元的坐标和对应值的常规表格,也可以将栅格转成data.frame后用write.csv保存:
r_df <- as.data.frame(sp_raster, xy = TRUE, na.rm = TRUE) write.csv(r_df, "zzz.csv", row.names = FALSE)
内容的提问来源于stack exchange,提问作者Movahhed
相关产品推荐
相关产品推荐

