数学之路(2)-数据分析-R基础(25)

2019-04-14 20:18发布

19)定义函数与操作符 有限维空间中,已知向量的坐标,就可以知道它的模长。
| vec{v} |= sqrt{v_1^2 + v_2^2 + cdots + v_n^2}
我们定义一个求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(XY) =sqrt   (∑( ( x[i] - y[i] )^2 ))  其中 i = 12,…,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 >