字符串导致地理编码抛出错误

String causes geocode to throw error

运行这行代码

library(ggmap)
geocode(location="Somewhere in Nigeria Winning",source="dsk", output="more")

抛出这个错误

Error in vapply(gc$results[[1]]$address_components, function(x) x[[nameToGrab]],  : values must be length 1, but FUN(X[[1]]) result is length 0

有人可以阐明为什么会发生这种情况以及我可以做些什么来解决它吗?我知道这似乎是一个奇怪的问题,但是这个字符串出现在一组要修剪的数据中并且似乎正在破坏地理编码。

只想 post 一个答案,因为我已经找到了问题所在,任何人都希望 workaround/want 知道该怎么做。问题不在于 DSK,而在于 ggmap 代码本身。如果你 运行

geocode(location="not a place in the slightest",source="dsk", output="more")

然后该库将优雅地失败并返回预期的内容。

geocode failed with status ZERO_RESULTS, location = "not a place in the slightest" 

然而,中间的某些字符串(如上面的字符串)由于 DSK returns 数据而不太优雅地失败,但它不是好的数据问题是由位于结果数组中的数据引起的(请注意,出于明显的原因,您无法使用更多标志来获得此功能,您需要全部使用)。

$results[[1]]$address_components[[1]]$long_name
NULL

$results[[1]]$address_components[[1]]$short_name
NULL

lib 中使用 "more" 标志将其解析为数据帧的代码在此处阻塞

nameToGrab   <- `if`(nameType == "long", "long_name", "short_name")
outputVals  <- vapply(gc$results[[1]]$address_components, function(x)  
x[[nameToGrab]], character(1))
outputNames <- vapply(gc$results[[1]]$address_components, function(x){ if(length(x$types) == 0) return("query")
      x$types[1]
    },
    character(1)
)

因为 long_name 和 short_name 都是 NULL,所以 vapply 将会失败。