#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