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
>
本博客所有内容是原创,未经书面许可,严禁任何形式的转载。
ttp://blog.csdn.net/u010255642
我们再定义一个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
>