measurements::conv_unit()返回字符向量而非数值向量的问题排查
关于measurements::conv_unit()返回字符向量的问题解答
你的操作完全符合measurements::conv_unit()的要求——输入格式正确,还覆盖了正负坐标、不同数据结构测试,甚至在干净R会话中验证,这点做得非常细致,你没有操作错误。
这个现象是当前measurements包(1.1.0版本)的设计行为:虽然你查阅的资料提到函数应返回数值向量,但实际处理deg_min_sec到dec_deg的转换时,函数针对字符输入的处理方法(measurements:::conv_unit.character)在完成计算后,会直接将数值结果转为字符串返回,并没有自动做数值类型转换。
解决办法
你提到的as.numeric()转换确实是最直接且可靠的方案,因为返回的字符是精确的数值表示,转换后不会损失精度。如果想简化日常操作,可以封装一个小函数:
# 封装度分秒转十进制度的函数,直接返回数值向量 conv_dms_to_dec <- function(x) { as.numeric(measurements::conv_unit(x, from = 'deg_min_sec', to = 'dec_deg')) } # 使用示例 df <- c("1 1 1", "-1 1 1", "2 2 2","-2 2 2") conv_dms_to_dec(df) # 返回:[1] 1.016944 -1.016944 2.033889 -2.033889
额外建议
如果觉得文档描述和实际行为不一致的问题影响使用,你可以在measurements包的代码仓库提交issue,反馈这个细节,建议维护者要么更新文档明确返回类型,要么增加选项让用户可以选择返回数值类型,后续版本可能会优化这个点。
内容的提问来源于stack exchange,提问作者Robbes
相关产品推荐
相关产品推荐

