如何表示R中的点列表

时间:2010-05-03 19:39:23

标签: data-structures r

我正在使用大量的点列表(每个点都有三个维度x,y,z)。

我对R很新,所以我想知道什么是表示这类信息的最佳方式。据我所知,数组允许我表示任何多维数据,所以目前我正在使用:

> points<-array( c(1,2,0,1,3,0,2,4,0,2,5,0,2,7,0,3,8,0), dim=c(3,6) )
> points
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    2    2    2    3  -- x dim
[2,]    2    3    4    5    7    8  -- y dim
[3,]    0    0    0    0    0    0  -- z dim

目的是执行一些计算来计算两组点之间的欧氏距离,例如:

points1<-array( c(1,2,0,1,3,0,2,4,0,2,5,0,2,7,0,3,8,0), dim=c(3,6) )
points2<-array( c(2,2,0,1,4,0,2,3,0,2,4,0,2,6,0,2,8,0), dim=c(3,6) )

(在这个意义上的任何暗示也将受到高度赞赏)

4 个答案:

答案 0 :(得分:4)

您可以使用函数dist获取距离矩阵。此函数计算数据矩阵的之间的距离,因此我转换了 points 数组

dist(t(points),method = "euclidean")

计算距离矩阵的另一个类似函数是来自包amap的{​​{3}},它提供了更多的距离测量:(“欧几里得”,“最大”,“曼哈顿”,“堪培拉”,“二进制“,”皮尔逊“,”相关“,”长矛“,”肯德尔“)

答案 1 :(得分:4)

计算这样存储的两组点之间的欧几里德距离很容易:

sqrt(colSums((points1 - points2)^2))

虽然我建议在列中存储维度。在这种情况下,代码变为:

sqrt(rowSums((points1 - points2)^2))

答案 2 :(得分:2)

您可能想看看CRAN Task View for Statial Data Analysis提供的内容 - 有许多合适的套餐。

答案 3 :(得分:1)

我建议使用你的矩阵转置,否则你可能最终会调用函数t(),而不是你原来的。

除此之外,这可能是您想要的数据结构。你当然可以使用数据框来完成它,但我认为你最好不要在这种情况下这样做。