Измените
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)]
Почему похоже, что вы выбираете размер окна, который является целым числом вашего размера окна?Вы пытались выбрать из inputseq?
Даже если вы выбирали из inputseq, способ сделать это - substr(inputseq, start, stop)
Где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")
Это должно помочь вам в этом.После этого ты сам по себе; -)