2016-10-06 81 views
0

我正在學習如何在R中編寫函數,我認爲編寫距離公式的函數是一種很好的做法。真正讓我失望的是你的功能參數是座標而不是單數。學習如何在R中創建函數 - 距離公式

溫和複習的距離公式:

d = sqrt((x_2 - x_1)^2 + (y_2 - y_1)^2) 

這是我試過什麼(最終失敗)爲止。我不知道從哪裏開始,所以任何提示將不勝感激。我已經爲p1和p2嘗試了很多不同的組合,但我真的不知道該怎麼做。

p1 = c("x_1", "y_1") 
p2 = c("x_2", "y_2") 

find_distance <- function(p1, p2) { 
    sqrt(("x_2" - "x_2")^2 + ("y_2" - "y_1")^2) 
} 
+3

你只需要引用你值'的sqrt()內'在p1和p2的條款。即'sqrt((p2 [1] - p1 [1])^ 2 - (p2 [2] - p1 [2])^ 2)' – Nate

回答

0

你傳遞p1p2到您的功能,但不使用它們。

而且,你x_1,並x_2是你p1p2向量的元素,所以你需要訪問這些單個元素,而不是使用整個矢量。

舉個例子來說

p1 <- c(1, 2) 
p2 <- c(3, 4) 

然後x_1因此

p1[1] 
# [1] 

x_2

p1[2] 
# [2] 

所以我們現在可以使用函數內p

find_distance <- function(p1, p2){ 
    res <- sqrt((p2[1] - p1[1])^2 + (p2[2] - p1[2])^2) 
    return(res) 
} 

find_distance(p1, p2) 
# [1] 2.828427 
+0

@AlexW - 感謝您的發現!現在糾正。 – SymbolixAU

0
x1 <- c(1, 2) 
x2 <- c(3, 4) 

my_distance_func <- function(p1, p2) { 
    if (length(p1) != length(p2)) stop("p1 and p2 must be equi-length") 
    return(sqrt(sum((p1-p2)^2))) 
} 

my_distance_func(x1, x2) 

該代碼矢量,並且將擴展到n維矢量p1p2

+0

@SymbolixAU同樣,感謝您發現 –