В R 2.14.1, что означает неправильный знак в аргументе «по»? - PullRequest
3 голосов
/ 21 февраля 2012

Вот мой код

slidingwindowplotATGC = function(windowsize, inputseq) 
{

starts = seq(1, length(inputseq)-windowsize, by = windowsize)
n = length(starts)
chunkGs = numeric(n)
chunkAs = numeric(n)
chunkTs = numeric(n)
chunkCs = numeric(n)
for (i in 1:n) { 
    chunk = windowsize[starts[i]:(starts[i]+9999)]
    chunkG = sum("g" == chunk)/length(chunk)
    chunkA = sum("a" == chunk)/length(chunk)
    chunkT = sum("t" == chunk)/length(chunk)
    chunkC = sum("c" == chunk)/length(chunk)
  chunkGs[i] = chunkG
    chunkAs[i] = chunkA
  chunkTs[i] = chunkT
  chunkCs[i] = chunkC
}   
plot(starts,chunkGs,type="b",ylim=c(min(min(chunkAs),min(chunkTs),min(chunkCs),min(chunkGs)),max(max(chunkAs),max(chunkTs),max(chunkCs),max(chunkGs))),col = "red")
points(starts,chunkTs,col = "blue")
points(starts,chunkAs,col = "green")
points(starts,chunkCs)

}

Я получаю следующее сообщение об ошибке,

Error in seq.default(1, length(inputseq) - windowsize, by = windowsize) : 
  wrong sign in 'by' argument

, которое я никогда не получал раньше, когда запускал коды такого родаНа самом деле, я запустил старый код, который отлично работал раньше, за исключением того времени, когда я получаю это сообщение об ошибке, которое, кажется, не имеет никакого смысла вообще!Мне нужна помощь с этим до того, как я сойду с ума ... Может, я просто плох в этой программе, но мне кажется, что у нее есть собственный разум ... Я также получал сообщение об ошибке, прежде чем касалось функции ylim,заявляя, что это должно быть конечное значение, что я ему дал?HELP !!!

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Дальнейшая конденсация.Вам нужно указать windowsize (ширина окна) и by (периодичность выборки) по отдельности, хотя я думаю , что вы хотели, чтобы они были одинаковыми (т.е. нарезать последовательность на эксклюзивные куски) - есливам нужно скользящее окно, которое вы могли бы использовать by=1.

Ошибка, которую вы видите выше, наиболее вероятна, потому что по какой-то причине windowsize больше nchar(inputseq).

slidingwindowplotATGC = function(windowsize, by, inputseq) {
  s = strsplit(inputseq, "")[[1]]
  colors = c("green", "black", "red", "blue")
  counts =  rollapply(factor(s), width=windowsize, by=by,table)
  matplot(counts,type="l", lty=1,col=colors)
  counts
}

itest <- "aagaaaagatcaaagaccagccgccccaccccccagagccccccc"
slidingwindowplotATGC(10, itest)

Вам также следует проверить Bioconductor - очень вероятно, что где-то есть эффективный код для выполнения такого рода сводок.

3 голосов
/ 21 февраля 2012

Измените

starts = seq(1, length(inputseq)-windowsize, by = windowsize)

на

starts = seq(1, nchar(inputseq)-windowsize, by = windowsize)

, предполагая, что вы используете символьный вектор в качестве inputseq, например

slidingwindowplotATGC(3, "ATAGACGATACGATACCCCGAGGGTAGGTA")

ETA: Помимо этогоРазница, есть некоторые очень серьезные проблемы с тем, как вы используете векторы символов.Например:

 windowsize[starts[i]:(starts[i]+9999)]
  1. Почему похоже, что вы выбираете размер окна, который является целым числом вашего размера окна?Вы пытались выбрать из inputseq?

  2. Даже если вы выбирали из inputseq, способ сделать это - substr(inputseq, start, stop)

  3. Гдеstarts[i]+9999 взято?Вы имеете в виду starts[i]+windowsize?

Вы должны начать все сначала и тщательно обдумать, что вы пытаетесь сделать, и изучить правильные инструменты, чтобы сделать это в течение R.

ETA: Предлагаемое переписывание того, что вы пытаетесь сделать (сначала вам нужно установить пакет zoo):

library(zoo)

slidingwindowplotATGC = function(windowsize, inputseq) 
{
    print(nchar(inputseq)-windowsize)
    s = strsplit(inputseq, "")[[1]]
    starts = seq(1, nchar(inputseq)-windowsize, by = windowsize)
    n = length(starts)
    letters = c("a", "c", "g", "t")
    colors = c("green", "black", "red", "blue")
    counts = t(sapply(letters, function(l) rollapply(s, windowsize, function(x) mean(x == l))))
    plot(counts[1, ], type="l", col=colors[1])
    for (i in 2:4) {
        points(counts[i, ], type="l", col=colors[i])
    }
    print(counts)
}

slidingwindowplotATGC(10, "aagaaaagatcaaagaccagccgccccaccccccagagccccccc")

Это должно помочь вам в этом.После этого ты сам по себе; -)

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