Функция, которая вычисляет евклидово расстояние в R

#r

#r

Вопрос:

Я хочу создать функцию, которая имеет два входа, каждый из которых представляет собой вектор действительных чисел, и выводит евклидово расстояние между двумя векторами. Я хотел бы знать, как это сделать. Это то, что я пробовал до сих пор;

 distance<-function(A=c(x1,y1),B=c(x2,y2)){
    return(dist(A,B,method="euclidean"))
}
distance(c(-2,1),c(2,6))
  

Выполнение этого дает :

 > distance<-function(A=c(x1,y1),B=c(x2,y2)){
    return(dist(A,B,method="euclidean"))
  }
> distance(c(-2,1),c(2,6))
  1 2
1 0  
2 3 0
Warning message:
In if (!diag) cf[row(cf) == col(cf)] <- "" :
  the condition has length > 1 and only the first element will be used
  

Попытка

     distance<-function(A=c(x1,y1),B=c(x2,y2)){
   return(sqrt((y2-y1)^2  (x2-x1)^2))
}
distance(c(-2,1),c(2,6))
  

выдает

      return(sqrt((y2-y1)^2  (x2-x1)^2))
  }
> distance(c(-2,1),c(2,6))
Error in distance(c(-2, 1), c(2, 6)) : object 'y2' not found
  

Я не уверен, почему возникает объект ошибки y2 not found.

Комментарии:

1. Используйте dist(...,method = 'euclidean') base R функцию

Ответ №1:

Вы не можете назначать переменные внутри вектора в качестве аргумента, вы можете только назначить вектор 1×2 и использовать [] для доступа к его содержимому.

 distance<-function(A, B){
  return(sqrt((A[1]-A[2])^2  (B[1]-B[2])^2))
}

distance(c(-2,1),c(2,6))
> [1] 5