изменение кода в самом внутреннем цикле для вычисления процента перекрытий генов между различными списками генов - PullRequest
0 голосов
/ 05 декабря 2018

В настоящее время у меня есть некоторый код, который работает для вычисления перекрытия между 8 различными списками генов, чтобы увидеть, сколько генов являются общими для двух списков одновременно.Я хотел бы изменить код так, чтобы я мог получить тот же результат, но в процентах.Пожалуйста, найдите код ниже: Внутренний цикл должен быть изменен в соответствии со следующим: 1. Получите максимум g1 и g2 2. Разделите перекрытие на максимум 3. Рассчитайте%

Я понимаю необходимые шагипринять, но я борюсь, когда дело доходит до изменения кода, как сообщения об ошибках, как правило, происходят.Если бы кто-то мог помочь, это было бы здорово!

filelist <- list(data.file1, data.file2, data.file3, data.file4, data.file5, data.file6, data.file7, data.file8)
all(sapply(filelist, file.exists))

# read files:
gene.lists <- lapply(filelist, function(f) {
  scan(file=f, what=character())
})


# set up empty matrix
x <- (length(gene.lists))^2
x
y <- rep(NA, x)
mx <- matrix(y, ncol=length(gene.lists))
mx
row.names(mx) <- sapply(filelist, basename) %>% stringr::str_remove('.txt$')
colnames(mx) <- sapply(filelist, basename) %>% stringr::str_remove('.txt$')
mx

mx.overlap.count <- mx

# seq_along(gene.lists) # 1 2 3 4 5 6 7 8
for (i in seq_along(gene.lists)) {
  g1 <- gene.lists[[i]]
  for (j in seq_along(gene.lists)) {
    g2 <- gene.lists[[j]]
    a <- intersect(g1, g2)
    b <- length(a)
    mx.overlap.count[j,i] <- b
  }
}

mx.overlap.count
View(mx.overlap.count)

#----------------------------------------------------------------------

# looking at gene overlaps in terms of %

#----------------------------------------------------------------------
# modify the code written above by adding the following to the innermost loop:
# get max of g1 and g2
# divide overlap by the max
# calculate the %

Ниже вы увидите код для попытки вычислить значения в процентах -

# seq_along(gene.lists) # 1 2 3 4 5 6 7 8
mx.overlap <- mx
for (i in seq_along(gene.lists)) {
  g1 <- gene.lists[[i]]
  for (j in seq_along(gene.lists)) {
    g2 <- gene.lists[[j]]
    a <- intersect(g1, g2)
    b <- length(a)
    maxN = max(length(g1), length(g2))
    mx.overlap[j,i]= 100* b / maxN
    mx.overlap.count[j,i] <- b
  }
}

mx.overlap.count
View(mx.overlap.count)

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, что-то вроде:

for (i in seq_along(gene.lists)) {
    g1 <- gene.lists[[i]]
    for (j in seq_along(gene.lists)) {
        g2 <- gene.lists[[j]]
        a <- intersect(g1, g2)
        b <- length(a)
        maxN = max(length(g1),length(g2))
        mx.overlap[j,i] = 100 * b / maxN
        mx.overlap.count[j,i] <- b
    }
}

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...