热线电话:13121318867

登录
2018-11-28 阅读量: 2449
R如何实现欧式距离等计算

如何计算每列间的距离,假如计算第一列与其他列之间的距离,并求出距离最小的那一组,在R中能否实现欧氏距离和马氏距离的计算?请求解答。

在R中计算距离的函数为dist(),比较直接的用法是dist(x,method="euclidean")即为计算欧式距离,其余可选的参数还有"maximum", "manhattan", "canberra", "binary" ,"minkowski",lz调整这个参数就能得到lz要的距离。

sample code:

data=read.csv(file="E:\\R1.csv",header=T,row.names=1)

mdist=as.matrix(dist(data))

mvec=mdist["504",]

说明:

R最好读.csv文件,直接.xlsx文件经常有问题,所以我把你的excel xlsx转成csv了。dist默认就是算欧式距离,算完后得到一个所有距离的矩阵,假定你需要sample 504(即你的data中第一列编号504的)和其他所有sample的距离(包括和504自己),最后vector mvec中的结果就是需要的。如果你只需要504和其他所有sample的距离,想把和504自己的距离去掉,最后用:

mvec=mdist["504",-(row.names(mdist)=="504")]

马氏距离直接用mahalanobis(data,center=,cov=), 返回是一个vector,即对于每个sample X,计算

   (X-mu)' S.inv (X-mu)

mu就是center或者“均值”,S即cov或者variance-covariance matrix,S.inv是S的逆。我不知道你要用神马center和cov,所以没写。如果你想算的是对于两个sample X,Y,马氏距离为:

   (X-mu)' S.inv (Y-mu)

比如X固定为某个sample,Y应该变化为其他所有sample,要得到一系列的距离,这个也很容易,只要有mu和S,自己做matrix multiplication就好了。

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子