R 中反向地理编码循环的下标越界
Subscript out of bounds for reverse geocoding loop in R
我正在尝试使用 google api 键对数据集进行反向地理编码。我设法 运行 代码并获得了 10 个小样本的预期结果,但它给出了一个错误
Error in rgc$results[[1]] : subscript out of bounds
我使用以下代码成功集成了 api 密钥:
` revgx <- mapply(function(latlng, api_key){
url= paste("https://maps.googleapis.com/maps/api/geocode/json?","latlng=",latlng,"&key=",sep="")
rgc <- fromJSON(paste(readLines(url), collapse = ''))
rgc <- rgc$results[[1]]
with(rgc,{rgcdf <<- data.frame(
address = formatted_address
)})
for(k in seq_along(rgc$address_components)){
rgcdf <- cbind(rgcdf, rgc$address_components[[k]]$long_name)
}
names(rgcdf) <- c('address', sapply(rgc$address_components, function(l) l$types[1]))
# return 'more' output
rgcdf
},
y1$latlng)`
我也尝试过将 xml 与 xml 结合使用,但无济于事。如果需要对代码进行任何更改,请提出建议。
我测试了你的代码,它对我有用。但你不是在测试状态。如果 latlng 不正确,它将 return "ZERO RESULTS" 作为状态(并且不存在 rgc$results)。这是我测试过的代码。
rev <- function(latlng, api_key) {
url= url(paste("https://maps.googleapis.com/maps/api/geocode/json?","latlng=",latlng,"&key=",sep=""))
rgc <- fromJSON(paste(readLines(url), collapse = ''))
close(url)
if (rgc["status"] == "OK") {
rgc <- rgc$results[[1]]
with(rgc, {
rgcdf <<- data.frame(address = formatted_address)
})
for (k in seq_along(rgc$address_components)) {
rgcdf <- cbind(rgcdf, rgc$address_components[[k]]$long_name)
}
names(rgcdf) <- c("address", sapply(rgc$address_components, function(l) l$types[1]))
rgcdf["valid_latlong"] <- TRUE
rgcdf
} else {
rgcdf <- c(valid_latlong=FALSE)
}
}
我测试了这个:
rev("12.9756300,77.6066230")
您是否以这种格式传递 latlng?或者 c(9756300,77.6066230) 。然后你需要做
latlng <- gsub(' ','%20', paste(latlng, collapse=","))
此外,您还没有在共享的代码段中集成 api 键。将 api_key 传递给查询参数。
我正在尝试使用 google api 键对数据集进行反向地理编码。我设法 运行 代码并获得了 10 个小样本的预期结果,但它给出了一个错误
Error in rgc$results[[1]] : subscript out of bounds
我使用以下代码成功集成了 api 密钥:
` revgx <- mapply(function(latlng, api_key){
url= paste("https://maps.googleapis.com/maps/api/geocode/json?","latlng=",latlng,"&key=",sep="")
rgc <- fromJSON(paste(readLines(url), collapse = ''))
rgc <- rgc$results[[1]]
with(rgc,{rgcdf <<- data.frame(
address = formatted_address
)})
for(k in seq_along(rgc$address_components)){
rgcdf <- cbind(rgcdf, rgc$address_components[[k]]$long_name)
}
names(rgcdf) <- c('address', sapply(rgc$address_components, function(l) l$types[1]))
# return 'more' output
rgcdf
},
y1$latlng)`
我也尝试过将 xml 与 xml 结合使用,但无济于事。如果需要对代码进行任何更改,请提出建议。
我测试了你的代码,它对我有用。但你不是在测试状态。如果 latlng 不正确,它将 return "ZERO RESULTS" 作为状态(并且不存在 rgc$results)。这是我测试过的代码。
rev <- function(latlng, api_key) {
url= url(paste("https://maps.googleapis.com/maps/api/geocode/json?","latlng=",latlng,"&key=",sep=""))
rgc <- fromJSON(paste(readLines(url), collapse = ''))
close(url)
if (rgc["status"] == "OK") {
rgc <- rgc$results[[1]]
with(rgc, {
rgcdf <<- data.frame(address = formatted_address)
})
for (k in seq_along(rgc$address_components)) {
rgcdf <- cbind(rgcdf, rgc$address_components[[k]]$long_name)
}
names(rgcdf) <- c("address", sapply(rgc$address_components, function(l) l$types[1]))
rgcdf["valid_latlong"] <- TRUE
rgcdf
} else {
rgcdf <- c(valid_latlong=FALSE)
}
}
我测试了这个:
rev("12.9756300,77.6066230")
您是否以这种格式传递 latlng?或者 c(9756300,77.6066230) 。然后你需要做
latlng <- gsub(' ','%20', paste(latlng, collapse=","))
此外,您还没有在共享的代码段中集成 api 键。将 api_key 传递给查询参数。