我正在使用 R 中的
sdm
包来运行物种的物种分布模型。我尝试运行以下命令:
sdmData <-sdmData(sp~ Wetland +Distance_Protected_Area +Distance_Shore +
Distance_Settlement +Distance_Cages +
Cages_Present + Bathymetry,
train = sdm_Data, predictors = AllOccRasters, bg = BackgroundPoints)
并出现以下错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘sdmData’ for signature ‘"formula", "data.frame", "RasterStack"’
看到此查询(无法使用 {sdmData} 编译数据集 - 错误)
我试过了
sdm_Data <- as(sdm_Data, 'Spatial')
并且得到了
Error in as(sdm_Data_nets, "Spatial") :
no method or default for coercing “data.frame” to “Spatial”
如果有帮助,这是我的数据示例,来自 sdm_Data
structure(list(sp = c("F_ardesiaca", "F_ardesiaca", "F_ardesiaca", "F_ardesiaca", "F_ardesiaca"),
Totora = c(-0.239973815, -0.239973815, -0.239973815,
-0.239973815, -0.239973815), Distance_Protected_Area = c(-1.378201598,
-1.123927933, -1.137970591, -1.123927933, -1.162127222),
Distance_Shore = c(-1.094753612, -0.960762706, -0.911857012,
-0.960762706, -1.086927111), Distance_Settlement = c(-1.100245165,
-0.972346735, -0.935389232, -0.972346735, -1.141459148),
Distance_Cages = c(-1.445217077, -1.437232488, -1.260983258,
-1.437232488, -1.181728985), Cages_Present = c(0L, 0L,
0L, 0L, 0L), Bathymetry = c(1.122127163, 0.740096285,
0.369610894, 0.740096285, 0.836073376), latitude = c(-15.86403,
-15.48954, -15.50397, -15.4846, -15.5163), longitude = c(-69.93177,
-69.88749, -69.8816, -69.89034, -69.87735)), na.action = structure(c(`1` = 1L,
`2` = 2L, `46` = 46L, `71` = 71L, `73` = 73L, `76` = 76L, `77` = 77L,
`87` = 87L, `89` = 89L, `113` = 113L, `140` = 140L, `141` = 141L,
`142` = 142L, `143` = 143L, `144` = 144L, `147` = 147L, `152` = 152L,
`163` = 163L, `174` = 174L, `185` = 185L, `188` = 188L, `193` = 193L,
`196` = 196L, `207` = 207L, `218` = 218L, `229` = 229L, `240` = 240L,
`241` = 241L, `252` = 252L, `263` = 263L, `274` = 274L, `285` = 285L,
`296` = 296L, `307` = 307L, `318` = 318L, `327` = 327L, `328` = 328L,
`329` = 329L, `340` = 340L, `351` = 351L, `352` = 352L, `363` = 363L,
`374` = 374L, `385` = 385L, `396` = 396L, `407` = 407L, `418` = 418L,
`429` = 429L, `440` = 440L, `451` = 451L, `462` = 462L, `463` = 463L,
`467` = 467L, `468` = 468L, `474` = 474L, `485` = 485L, `493` = 493L,
`496` = 496L, `507` = 507L, `516` = 516L, `518` = 518L, `524` = 524L,
`525` = 525L, `526` = 526L, `529` = 529L, `540` = 540L, `551` = 551L,
`554` = 554L, `562` = 562L, `566` = 566L, `573` = 573L, `574` = 574L,
`585` = 585L, `596` = 596L, `607` = 607L, `618` = 618L, `629` = 629L,
`640` = 640L, `651` = 651L, `662` = 662L, `673` = 673L, `682` = 682L,
`684` = 684L, `685` = 685L, `687` = 687L, `688` = 688L, `690` = 690L,
`693` = 693L, `694` = 694L, `696` = 696L, `707` = 707L, `718` = 718L,
`729` = 729L, `740` = 740L, `751` = 751L, `762` = 762L, `773` = 773L,
`782` = 782L, `784` = 784L, `795` = 795L, `796` = 796L, `807` = 807L,
`808` = 808L, `818` = 818L, `829` = 829L, `840` = 840L, `851` = 851L,
`862` = 862L, `873` = 873L, `874` = 874L, `878` = 878L, `884` = 884L,
`885` = 885L, `888` = 888L, `895` = 895L, `903` = 903L, `906` = 906L,
`907` = 907L, `918` = 918L, `921` = 921L, `929` = 929L, `934` = 934L,
`935` = 935L, `937` = 937L, `939` = 939L, `940` = 940L, `948` = 948L,
`950` = 950L, `951` = 951L, `952` = 952L, `954` = 954L, `956` = 956L,
`962` = 962L, `969` = 969L, `973` = 973L, `974` = 974L, `984` = 984L,
`992` = 992L, `995` = 995L, `998` = 998L, `999` = 999L, `1004` = 1004L,
`1006` = 1006L, `1017` = 1017L, `1018` = 1018L, `1029` = 1029L,
`1053` = 1053L, `1054` = 1054L, `1073` = 1073L, `1084` = 1084L,
`1095` = 1095L, `1106` = 1106L), class = "omit"), row.names = 3:7, class = "data.frame")
我认为省略是指我使用
omit.na()
函数删除了我没有数据集中所有环境栅格信息的数据点。
如果您知道这里出了什么问题/是否有解决方案,以及这是否更适合 GIS 堆栈交换,请告诉我
所以我找到了一个解决方案,即将 data.frame 转换为 SpatialPointsDataFrame 对象,方法是:
coordinates(sdm_Data) <-(~longitude + latitude)
我仍然不确定为什么
sdmData()
不接受 data.frame 对象,因为它应该接受