我有以下矩陣:兩個城市之間書寫功能與環路
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個城市參與的情況下發揮作用。如果涉及多個城市,你將如何發揮功能? (伯克利 - > SanFrancisco-> PaloAlto等),我想你必須使用某種循環。我開始了與功能
get_distance <- function(cities, dists)
其中向量「城市」爲
cities <- c("Berkeley", "SanFrancisco", "Oakland",
"PaloAlto", "SanMateo", "Hayward", "Richmond")
我在思考如何處理這個函數的定義。我的思維過程是創建一個函數,它將添加城市對的總和,例如,如果您輸入函數get_distance(c("Berkeley", "Oakland", "SanFrancisco"), dists)
,那麼它將(伯克利,奧克蘭)和(奧克蘭,SanFrancisco)的距離相加。然後,我會讓該函數使用重複循環並中斷,直到達到輸入的城市數量(函數中的參數總數?)。我不認爲這是寫這個函數的有效方法,有沒有更好的方法?這是我對代碼的嘗試,但我不知道如何計算函數中可變數量的參數。我嘗試使用narg(),我想到了點參數,但似乎無法弄清楚。
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]]) }
}
是使用重複循環不可能?我想看看我能否使用這種方法 –
@AndyQuach是否可以使用重複循環?是的,它。是否推薦?可能不會。在R中,最好避免可避免的循環。 –
雖然for循環在這裏是一個更明顯的選擇,但這是可能的。但是這是R;爲什麼使用循環,如果沒有需要它?只是爲了讓你的代碼更慢,更冗長? – RobertH