R使用df2move转move对象时报找不到move函数继承方法错误如何解决
问题根因
- 核心报错来自
df2move的proj参数传值错误
你调用函数时传入的proj没有提前定义为坐标参考系对象,R默认匹配到了grDevices包自带的proj()函数,将函数作为参数传入,才会出现报错签名最后的"function"提示,这是本次报错的直接原因。 attach()使用不当是潜在风险
你多次调用attach(jaguar_data),且数据框列名和moveVis包的导出对象重名,才会出现变量屏蔽提示,虽然本次报错不是直接由屏蔽导致,但该用法极易引发变量名冲突,后续出现不可预知的取值错误。
解决方案
- 第一步:清理错误attach的环境
优先重启R会话清空环境,也可以多次执行以下命令直到提示不存在该对象:
detach("jaguar_data")
后续不建议使用attach()操作数据框,取列直接用jaguar_data$列名或者dplyr语法即可。
- 第二步:正确定义坐标参考系
根据你的数据实际坐标系定义proj参数,示例为常用的WGS84经纬度坐标系:
# WGS84坐标系的proj4字符串,可根据你的数据替换为对应坐标系的字符串或CRS对象 my_proj <- "+proj=longlat +datum=WGS84 +no_defs"
- 第三步:重新调用
df2move
move_obj <- df2move( df = jaguar_data, proj = my_proj, x = "location.long", y = "location.lat", time = "timestamp", track_id = "Event_ID" )
额外排查方向
如果调整后仍报错,可依次检查以下内容:
- 执行
class(jaguar_data$timestamp)确认时间列是POSIXct/POSIXlt类型,若为字符串需用lubridate包的函数转换为时间格式 - 执行
class(jaguar_data$location.long)、class(jaguar_data$location.lat)确认经纬度列是数值类型 - 检查
Event_ID列、经纬度列、时间列是否存在缺失值,同一Event_ID下是否存在重复的时间记录
内容的提问来源于stack exchange,提问作者aiskenderian
相关产品推荐
相关产品推荐

