Вложено для циклов в data.table со сложными поднаборами для заполнения пустого data.table - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть data.table (dt), который выглядит так -

unigene  s.start   s.end
1:  70333442   25564   25601
2:  47901818  151379  151340
3:  22804559  237716  237685
4:  51650325  370382  370338
5:  45665472  691509  691553
6:  67902793  885586  885616
7: 107540914  909650  909617
8:  22777344 1234774 1234752
9: 103835796 1421236 1421263
10:  46208443 1595024 1595059

У меня есть этот код с вложенными циклами for, который по какой-то причине заполняет data.table намного медленнее, чем когда онбыл data.frame.Как я могу заставить его работать быстрее?Какие части моего кода замедляют его?

paretoPoints <- data.table(
l = integer(),
c = integer(),
u = integer())

for (m in 1:nrow(dt)) {
    for (n in 1:nrow(dt)) {
        if (m > n) {
            a <- as.numeric(dt[m, 4])
            b <- as.numeric(dt[n, 3])
            c <- as.numeric(abs(length(unique(dt[n:m]$gene))))

            s <- head(which(dt2$s == as.numeric(b)), 1)
            e <- tail(which(dt2$e == as.numeric(a)), 1)

            dt3 <- dt2[s:e]
            u <- length(unique(dt3$gene))

            paretoPoints = rbindlist(list(paretoPoints, list(a-b, c, u)))
  }
 }
}

Я пытался использовать combn (1: nrow (dt), 2, fun), но это не сработало.

...