使用R打印数据集的帕累托解

时间:2013-06-17 15:40:28

标签: r

我想知道R是否能够打印(或突出显示)仅为帕累托最优的输入数据集的点。

例如,在下面的2D图中,您可以观察到一组50个点。我希望能够用不同的颜色打印Pareto最佳点。在此示例中,请考虑将两个维度最小化。

http://i42.tinypic.com/jso7ma.png

任何提示?

编辑:

根据评论,我使用以下代码实现了预期的结果:

n <- 40
d <- data.frame(
  x = rnorm(n),
  y = rnorm(n)
)
# We want the "extreme" points in the following plot
par(mar=c(1,1,1,1))
plot(d, axes=FALSE, xlab="", ylab="")
for(i in 1:n) {
  polygon( c(-10,d$x[i],d$x[i],-10), c(-10,-10,d$y[i],d$y[i]), 
  col=rgb(.9,.9,.9,.2))
}


d <- d[ order(d$x, decreasing=FALSE), ]
result <- d[1,]
for(i in seq_len(nrow(d))[-1] ) {
  if( d$y[i] < result$y[nrow(result)] ) {
    result <- rbind(result, d[i,])  # inefficient
  } 
}
points(result, cex=2, pch=15)

1 个答案:

答案 0 :(得分:1)

这是使用chull(一组点的凸包)的解决方案。警告:未经测试。

# assume d is your matrix or data frame of points
ch <- d[chull(d), ]
ch[apply(ch, 1, function(p) !any(ch[, 1] < p[1] & ch[, 2] < p[2])), ]

您可以将chull替换为您自己的凸包算法(例如here中的一个),并将条件测试扩展为适合,将此扩展为&gt; 2维。