19)定义函数与操作符
有限维空间中,已知向量的坐标,就可以知道它的模长。
我们定义一个求
3维向量模长的函数:
> vector_length<-function(x1,x2,x3){
+ vlength<-sqrt (x1^2+x2^2+x3^2)
+ vlength
+ }
> vector_length(12,33,19)
[1] 39.92493
>
本博客所有内容是原创,未经书面许可,严禁任何形式的转载。
我们再定义一个
n维的求向量模长的函数
> vectorn_length<-function(x){
+ temp<-0
+ for (i in 1:length(x)){
+ temp<-temp+x[i]^2
+ }
+ vlength<-sqrt(temp)
+ vlength
+ }
> vectorn_length(c(11,22,33,44,55))
[1] 81.57818
> vectorn_length(c(11,22,33,55))
[1] 68.69498
>
操作符的定义使用
%符号%的方式定义,实际使用时%也属于操作符的一部分。我们定义一个操作符求欧氏距离。
欧氏距离(
Euclid Distance)是在n维空间中两个点之间的真实距离,n
维欧氏空间的每个点可以表示为 (x[1],x[2],…,x[n]) ,两个点 X = (x[1]
,x[2]
,…,x[n])
和 Y= (y[1]
,y[2]
,…,y[n])
之间的距离 d(X,Y)
定义为下面的公式:
d(X
,Y) =sqrt (∑
( ( x[i] - y[i] )^2 ))
其中 i = 1
,2,…,n
以
%~%为操作符:
> "%~%"<-function(x1,x2){
+ temp<-0
+ for (i in 1:length(x1)){
+ temp<-temp+(x1[i]-x2[i])^2
+ }
+ edis<-sqrt(temp)
+ edis
+ }
> c(1,2,3) %~% c(5,6,7)
[1] 6.928203
>
指定参数的默认值,在函数调用时可以省略该参数,通过在
function随后的参数表中直接指定
> vectorn_length<-function(x=c(1,1,1)){
+ temp<-0
+ for (i in 1:length(x)){
+ temp<-temp+x[i]^2
+ }
+ vlength<-sqrt(temp)
+ vlength
+ }
> vectorn_length()
[1] 1.732051
> vectorn_length(c(11,11,11))
[1] 19.05256
>