我正在寻找一种通用算法来识别最大长度为几百个数字的列表中的短数字系列。这将用于从质谱(ms1)数据中识别一系列质量。
例如,鉴于以下列表,我想确定其中3个数字符合N + 1,N + 2等系列。
426.24 <= N
427.24 <= N + 1/x
371.10
428.24 <= N + 2/x
851.47
451.16
该系列的格式均为:N,N + 1 / x,N + 2 / x,N + 3 / x,N + 4 / x等,其中x为整数(示例中为x = 1)。我认为这种约束使问题非常容易处理。有关快速/有效解决这个问题的建议吗?
答案 0 :(得分:2)
此例程将使用x从1到10生成系列(您可以增加它)。并将检查原始数字列表中包含的数量。
N = c(426.24,427.24,371.1,428.24,851.24,451.16)
N0 = N[1]
x = list(1,2,3,4,5,6,7,8,9,10)
L = 20
Series = lapply(x, function(x){seq(from = N0, by = 1/x,length.out = L)})
countCoincidences = lapply(Series, function(x){sum(x %in% N)})
结果:
unlist(countCoincidences)
[1] 3 3 3 3 3 3 3 3 3 2
如您所见,使用x = 1将有3个巧合。所有x都是如此,直到x = 9。在这里你必须决定你想要的x。