【发布时间】:2015-10-22 02:35:57
【问题描述】:
我有以下矩阵:
dists <- structure(c(0, 13.9, 5.2, 42.6, 38.4, 19.7, 7.6, 13.9, 0, 12.3,
33, 19.1, 26.9, 17.8, 5.2, 12.3, 0, 34.7, 30.5, 17.9, 11.7, 42.6,
33, 34.7, 0, 15.7, 21.5, 46.9, 38.4, 19.1, 30.5, 15.7, 0, 17.2,
42.6, 19.7, 26.9, 17.9, 21.5, 17.2, 0, 26.2, 7.6, 17.8, 11.7,
46.9, 42.6, 26.2, 0), .Dim = c(7L, 7L),
.Dimnames = list(c("Berkeley", "SanFrancisco", "Oakland", "PaloAlto",
"SanMateo", "Hayward", "Richmond"),
c("Berkeley", "SanFrancisco", "Oakland", "PaloAlto",
"SanMateo", "Hayward", "Richmond")))
列名和行名是城市名,矩阵的每个点是两个城市之间的距离(以英里为单位)。例如,如果我的观点是 [SanFrancisco, Berkeley],那么距离是 13.9。
我试图找出一个给定城市向量和城市之间距离矩阵的函数,该函数返回所提供城市之间的总距离。我知道如何在只涉及 2 个城市的情况下制作功能。在涉及多个城市的情况下,您将如何创建功能? (伯克利->旧金山->帕洛阿尔托等),我认为你必须使用某种循环。我从函数开始
get_distance <- function(cities, dists)
向量“城市”定义为
cities <- c("Berkeley", "SanFrancisco", "Oakland",
"PaloAlto", "SanMateo", "Hayward", "Richmond")
我在考虑如何处理这个函数。我的想法是创建一个函数,它将添加城市对的总和,例如,如果您输入函数get_distance(c("Berkeley", "Oakland", "SanFrancisco"), dists),那么它将求和(伯克利,奥克兰)和(奥克兰,旧金山)的距离。然后我会让函数使用重复循环并中断,直到它达到输入的城市数(函数中的参数总数?)。我不认为这是编写此函数的有效方法,有更好的方法吗?这是我对代码的尝试,但我不知道如何计算函数中可变数量的参数。我尝试使用 narg() 并考虑了 dot 参数,但似乎无法弄清楚。
get_distance <- function(cities, dists) {
i <- 1 #the ith city with i=(1,2,...)
number_of_cities = length(cities)
sum_dist <- 0
repeat {
sum_dist <- sum_dist + dist[cities[i-1], cities[i]]
if (i == number_of_cities) break
i <- i + 1
return(dists[cities[i-1], cities[i]]) }
}
【问题讨论】: