矢量的交叉产品

时间:2017-10-17 18:43:51

标签: r dplyr

我编写了以下函数来计算两个位置之间的行程距离。

# Get Distance
require(RJSONIO)
address1 = "Noida Sector 62"
address2 = "Connaught Place"
url <- "https://maps.googleapis.com/maps/api/distancematrix/json?"
url <- URLencode(paste(url, "origins=", address1,"&", "destinations=", address2, "&sensor=false", "&units=metric", "&mode=driving",  sep = ""))
x <- fromJSON(url, simplify = FALSE)
metres = x$rows[[1]]$elements[[1]]$distance$text

我想让上面的程序针对下面向量中提到的所有位置组合运行 -

address = c("Noida Sector 62" , "Saket", "Delhi University, North Campus", "Laxmi Nagar", "Khan Market", "Connaught Place")

2 个答案:

答案 0 :(得分:1)

使用combn创建所有可能的地址组合(此处我们使用m = 2,因为我们需要两个组合)。然后使用循环迭代对(foo矩阵)。

require(RJSONIO)
api <- "API_SEQUENCE"

address <- c("Noida Sector 62" , "Saket", "Delhi University, North Campus", "Laxmi Nagar", "Khan Market", "Connaught Place")

foo <- combn(address, 2)
metres <- list()
for(i in 1:ncol(foo)) {
    address1 <- foo[1, i]
    address2 <- foo[2, i]
    url <- "https://maps.googleapis.com/maps/api/distancematrix/json?"   
    url <- URLencode(paste(url, "origins=", address1,"&", "destinations=", address2, "&sensor=false", "&units=metric", "&mode=driving",  sep = ""))
    x <- fromJSON(url, simplify = FALSE)
    metres[[i]] <- x$rows[[1]]$elements[[1]]$distance$text
}

foo[, 1:5]
     [,1]              [,2]                             [,3]             
[1,] "Noida Sector 62" "Noida Sector 62"                "Noida Sector 62"
[2,] "Saket"           "Delhi University, North Campus" "Laxmi Nagar"    
     [,4]              [,5]             
[1,] "Noida Sector 62" "Noida Sector 62"
[2,] "Khan Market"     "Connaught Place"

答案 1 :(得分:1)

以下是使用expand.grid获取所有地址组合的解决方案。

distance <- function(a1, a2){
    url <- "https://maps.googleapis.com/maps/api/distancematrix/json?"
    url <- URLencode(paste(url, "origins=", a1,"&", "destinations=", a2, "&sensor=false", "&units=metric", "&mode=driving",  sep = ""))
    x <- fromJSON(url, simplify = FALSE)
    metres <- x$rows[[1]]$elements[[1]]$distance$text
    metres
}

address = c("Noida Sector 62" , "Saket", "Delhi University, North Campus", "Laxmi Nagar", "Khan Market", "Connaught Place")

add <- expand.grid(A1 = address, A2 = address, stringsAsFactors = FALSE)
add <- add[add$A1 != add$A2, ]
row.names(add) <- NULL
d <- apply(add, 1, function(x) distance(x[1], x[2]))
d
#[1] "29.0 km" "24.0 km" "10.7 km" "18.1 km" "18.3 km" "27.3 km" "27.0 km"
# [8] "18.6 km" "11.1 km" "15.8 km" "28.2 km" "28.3 km" "15.3 km" "16.8 km"
#[15] "8.5 km"  "11.3 km" "20.2 km" "15.3 km" "8.8 km"  "7.4 km"  "18.8 km"
#[22] "10.9 km" "17.7 km" "8.3 km"  "5.5 km"  "19.5 km" "14.0 km" "9.4 km" 
#[29] "7.1 km"  "4.7 km"
相关问题