R 错误:向量的长度错误,使用 Geosphere 包时应为 2

Posted

技术标签:

【中文标题】R 错误:向量的长度错误,使用 Geosphere 包时应为 2【英文标题】:R error: Wrong length for a vector, should be 2 while using Geosphere package 【发布时间】:2021-05-25 14:28:44 【问题描述】:

我正在尝试分析两个位置之间的平均距离,以便为自动批准行驶距离提供可接受的截止值。 我绑定了 (geosphere distHaversine() & dplyr - error wrong length for vector, should be 2) 和 (Getting Error in .pointsToMatrix(p1) : Wrong length for a vector, should be 2) 但我无法调试错误并完成我的分析。

数据框是这样的,有 10 行数据。

df <- c(lat1,long1,lat2,long2)

df matrix with 10 rows of data

当我尝试使用以下内容时

df %>% rowwise() %>% mutate(HVRSINE = distHaversine(c(df$long1,df$lat1),c(df$long2,df$lat2)))

错误出现:

Error: Problem with `mutate()` column `HVRSINE`.
x Wrong length for a vector, should be 2

The error occurred in row 1.

当我在 disthaversine 中手动编写 lat,long for 时,输出就像一个魅力。

我做错了什么?

【问题讨论】:

不要在dplyr 命令中使用$df$long1 覆盖 dplyr 的非标准评估以专门从整个 df 中提取整个 long1 列,忽略 rowwise 和任何 group_by 以及任何其他花哨的 dplyr 东西。更改为mutate(HVRSINE = distHaversine(c(long1, lat1), c(long2, lat2))),我认为它应该可以工作。 如果您想根据您的示例数据获得答案,请使用(类似)dput(head(df)) 的输出编辑您的帖子。 谢谢格雷戈尔·托马斯。像魅力一样工作。 【参考方案1】:

试试

library(tidyverse)
df %>%
  mutate(HVRSINE = unlist(pmap(list(a = long1, 
                                    b = lat1, 
                                    x = long2,
                                    y = lat2),
                               ~ distHaversine(c(..1, ..2), c(..3, ..4)))))

【讨论】:

以上是关于R 错误:向量的长度错误,使用 Geosphere 包时应为 2的主要内容,如果未能解决你的问题,请参考以下文章

如何解决以下错误?输入必须是任意长度的字符向量或字符向量列表,每个字符向量的长度为1

对向量进行冒泡排序的 C++ 长度错误

Rcpp R 向量大小限制(不允许负长度向量)

线框图(格子包)中的负长度向量是啥意思?

R语言数据对象类型

MATLAB错误:“向量必须是相同的长度”