等价的匹配功能,但具有接近平等的选择?

问题描述

我正在使用data.table功能来使用match在两个float数组中查找所有相同的行。
简单的例子:

common_rows <- match( data.frame(t(mat_one)),data.frame(t(mat_two))) 

我可以采取明显的预防措施,将mat_onemat_two首先四舍五入为通用精度,但这需要首先确定值的一般大小并计算要应用的适当精度(数字位数) (也不难,只需抓住log10(x)的整数部分并将其弄乱一点)。我想要的是base::match的等价物,但带有一个说“做近似等于”的参数。)

这里的重点是,我要获取匹配项的索引,而不是通过各种compare函数进行研究,然后深入矩阵以查找感兴趣的行。 除了预先舍入数据之外,还有其他更简单或更准确的方法吗?

解决方法

也许您想要这样的东西。使用:计算距离,然后每行获取outer

which.min

或者在i <- abs(outer(x,y,"-")) apply(i,1,which.min) #[1] 1 2 3 4 使用过多内存的情况下:

outer

数据:

sapply(x,function(x) which.min(abs(x-y)))