为输入对划分矩阵

时间:2015-06-28 12:00:40

标签: r matrix

 n=c(0,200,500)
 m=as.matrix(expand.grid( n,n)) 
 m #possible combin.

我希望得到所有可能的对(a< b)以便稍后在函数中运行它们来过滤矩阵。

#pairs should be somehow like this (a always smaller than b in each single attribute of the two attribute vector)
a=c(0,0)
b=c(200,200)
...
a=(200,0)
b=(500,200)
...
a=c(200,200)
b=c(500,500)

我想将结果存储在一个矩阵中,即它的一行看起来像:c(a,b)       c(0,200,200,500)

lower.tri上有一些关于如何划分矩阵的文章,我试过但没有成功。

为了更好地理解,想象一下可能组合的每一行都是一个向量。矢量的第一个元素是以分钟为单位的飞行时间。第二个是价格。 搜索价格在500美元到500美元之间的航班并没有多大意义。当航班最低价格为500美元且最高价格为200美元时,也不会。 “a”始终是最小参数,“b”是最大参数

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解正确,但也许这就是:

TableItem item = table.getSelection()[ 0 ]; // assumes a single selected item
item.setText( 1, "update first column" );
// or
item.setText( new String[]{ "col 1 value", "col 2 value" } );
// or, for a single-columned table
item.setText( "updated value" );

修改

在你的评论之后,也许这个:

combn(nrow(m), 2, function(ind, mat) mat[ind, ], mat = m)
#, , 1
#
#     [,1] [,2]
#[1,]    0    0
#[2,]  200    0
#
#, , 2
#
#     [,1] [,2]
#[1,]    0    0
#[2,]  500    0
#
#, , 3
#
#     [,1] [,2]
#[1,]    0    0
#[2,]    0  200
#
#...

编辑2:

m1 <- m[order(rowSums(m)),] #this is one definition of "smaller"

combs <- combn(nrow(m1), 2, function(ind, mat) mat[ind, ], mat = m1)
combs[,, apply(combs, 3, function(mat) diff(rowSums(mat)) != 0)]

如果仍然不完全符合您的需要,您应该可以调整它。