Я пытаюсь создать матрицу попарного сходства, где сравниваю сходство каждого члена HPO с каждым другим термином HPO, используя функцию getSimWang пакета R HPOSim. Пакет доступен здесь: https://sourceforge.net/projects/hposim/
Я могу создать матрицу попарного сходства для подмножества терминов HPO (их ~ 13 000), используя следующее:
list1<-c("HP:0002404","HP:0011933","HP:0030286")
custom <- function(x,y){
z <- getSimWang(x,y)
return(z)
}
outer(list1, list1, Vectorize(custom))
[,1] [,2] [,3]
[1,] 1.0000000 0.6939484 0
[2,] 0.6939484 1.0000000 0
[3,] 0.0000000 0.0000000 1
sapply(list1, function(x) sapply(list1, function(y) custom(x,y)))
HP:0002404 HP:0011933 HP:0030286
HP:0002404 1.0000000 0.6939484 0
HP:0011933 0.6939484 1.0000000 0
HP:0030286 0.0000000 0.0000000 1
Однако, когда я попытался расширить этот код, чтобы применить его к остальным терминам HPO, R вычислялся в течение 24+ часов, и когда я использовал pbsapply, чтобы оценить время, которое потребуется, он предположил, что это будет 20 дней !
Я также попробовал mapply - но это дает мне только подмножество вычислений (x1y1, x2y2 и x3y3), а не все комбинации (x1y1, x1y2, x1y3 и т. Д.).
mapply(custom, list1, list1)
HP:0002404 HP:0011933 HP:0030286
1 1 1
И решение xapply здесь , но когда я запускаю его, я теряю информацию о том, какие термины сравниваются:
xapply(FUN = custom, list1, list1)
[[1]]
[1] 1
[[2]]
[1] 0.6939484
[[3]]
[1] 0
[[4]]
[1] 0.6939484
[[5]]
[1] 1
[[6]]
[1] 0
[[7]]
[1] 0
[[8]]
[1] 0
[[9]]
[1] 1
Есть ли другой метод, который мне не хватает, чтобы получить попарные (или в идеале не избыточные попарные) вычисления для подобия? Или это действительно займет 20 дней?!?