考虑我有两个向量。一种是参考向量/列表,其中包括所有感兴趣的值和一个可能包含任何可能值的样本向量。现在我想在参考列表中找到我的样本的匹配项,该匹配项具有一定的容差,该容差不是固定的并且取决于向量内的比较值:
matches: abs(((referencelist - sample[i])/sample[i])*10^6)) < 0.5
对两个向量进行舍入是没有选择的!
例如考虑:
referencelist <- read.table(header=TRUE, text="value name
154.00312 A
154.07685 B
154.21452 C
154.49545 D
156.77310 E
156.83991 F
159.02992 G
159.65553 H
159.93843 I")
sample <- c(154.00315, 159.02991, 154.07688, 156.77312)
所以我得到结果:
name value reference
1 A 154.00315 154.00312
2 G 159.02991 159.02992
3 B 154.07688 154.07685
4 E 156.77312 156.77310
我能做的就是使用例如外部函数就像
myDist <- outer(referencelist, sample, FUN=function(x, y) abs(((x - y)/y)*10^6))
matches <- which(myDist < 0.5, arr.ind=TRUE)
data.frame(name = referencelist$name[matches[, 1]], value=sample[matches[, 2]])
或者我可以使用for()
loop.
但我的特殊问题是,参考向量有大约 1*10^12 个条目,而我的样本向量有大约 1*10^7 个条目。因此,通过使用 external() 我可以轻松破坏所有工作空间限制并使用for()
或被锁链for()
循环这将需要几天/几周才能完成。
有谁知道如何在 R 中快速完成此操作,仍然精确,但在计算机上工作消耗最大。 64 GB 内存?
谢谢你的帮助!
最好的祝愿