如何创建适配divvy包bandit函数的双元素向量?
解决divvy包bandit函数的坐标向量创建问题
首先明确divvy包的bandit()函数对坐标参数的要求:如果是单个点位,需要双元素数值向量(通常是经度在前、纬度在后);如果是多个点位,则需要矩阵或数据框(每行对应一个点位的经纬度)。结合你的数据框,正确的创建方法如下:
方法1:提取坐标列作为普通数据框(推荐)
因为你加载了dplyr,默认创建的df是tibble类型,直接索引列可能会保留tibble格式,导致函数识别异常。可以先转换成普通数据框:
# 注意:多数地理函数要求经度在前、纬度在后,需确认bandit文档的参数顺序 coords_df <- as.data.frame(df[, c("Longitude", "Latitude")])
直接将这个数据框传入bandit()的coords参数即可。
方法2:转换为坐标矩阵
如果函数更偏好矩阵格式,可使用:
coords_matrix <- as.matrix(df[, c("Longitude", "Latitude")])
方法3:生成包含双元素向量的列表(若需单个点位向量集合)
如果需要将每个点位单独存为双元素向量(比如后续逐点处理),可以用apply生成列表:
coords_list <- apply(df[, c("Longitude", "Latitude")], 1, c) # 此时coords_list的每个元素都是一个双元素数值向量,对应一行的经纬度
关于你遇到的错误解释
你用df[,c("Latitude", "Longitude")]触发的错误,大概率是因为tibble的索引逻辑和普通数据框略有差异,加上可能误将索引参数传入了列表类型(比如不小心写了list(c("Latitude", "Longitude")))。转换成普通数据框后即可避免这个问题。
内容的提问来源于stack exchange,提问作者Mary Ann Moody
相关产品推荐
相关产品推荐

