在R中计算SUD中心到医院距离时遇维度不匹配错误求解决
问题原因
你遇到的错误核心是维度不匹配:
st_distance(alameda_SUDs_centers, alameda_mediCal_hospitals)返回的是32行×11列的矩阵(对应32个SUD中心、11家医院)apply(alameda_distances,1,min)是按行取最小值,得到的是每个SUD中心到最近医院的距离,共32个值- 但你试图把这32个值赋值给只有11行的
alameda_mediCal_hospitals$distance,维度不匹配导致报错
解决方案
分两种需求场景处理:
场景1:给每家医院添加「最近SUD中心的距离」
如果你的目标是计算每家医院到最近SUD中心的距离,需要按列取最小值(矩阵的列对应医院):
alameda_distances <- st_distance(alameda_SUDs_centers, alameda_mediCal_hospitals) * 0.000621371 # 按列取最小,得到11个值(对应11家医院) alameda_mediCal_hospitals$distance <- as.vector(apply(alameda_distances, 2, min))
场景2:给每个SUD中心添加「最近医疗补助医院的距离」
如果你的目标是计算每个SUD中心到最近医院的距离,应该把距离列赋值给alameda_SUDs_centers而不是医院数据框:
alameda_distances <- st_distance(alameda_SUDs_centers, alameda_mediCal_hospitals) * 0.000621371 # 按行取最小,得到32个值(对应32个SUD中心) alameda_SUDs_centers$distance <- as.vector(apply(alameda_distances, 1, min))
额外优化建议
用sf原生的st_nearest_feature可以更高效地计算最近距离,避免手动处理矩阵:
# 给SUD中心加最近医院距离 nearest_hosp_idx <- st_nearest_feature(alameda_SUDs_centers, alameda_mediCal_hospitals) alameda_SUDs_centers$distance <- st_distance(alameda_SUDs_centers, alameda_mediCal_hospitals[nearest_hosp_idx,], by_element = TRUE) * 0.000621371 # 给医院加最近SUD中心距离 nearest_sud_idx <- st_nearest_feature(alameda_mediCal_hospitals, alameda_SUDs_centers) alameda_mediCal_hospitals$distance <- st_distance(alameda_mediCal_hospitals, alameda_SUDs_centers[nearest_sud_idx,], by_element = TRUE) * 0.000621371
内容的提问来源于stack exchange,提问作者GLowe
相关产品推荐
相关产品推荐

