在 R 2.14.1 中,“by”参数中的错误符号是什么意思?

The*_*oxx 4 r

这是我的代码

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)
Run Code Online (Sandbox Code Playgroud)

}

我收到以下错误消息,

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

我以前在运行此类代码时从未遇到过这种情况,事实上,我重新运行了以前运行良好的旧代码,只是这次我收到了这条错误消息,这似乎根本没有任何意义!在我完全发疯之前我需要帮助...也许我只是不擅长这个程序,但在我看来它有自己的想法...在关于 ylim 函数之前我也收到了一条错误消息,指出它需要是一个有限值,这就是我给它的值?帮助!!!

Dav*_*son 6

改变

starts = seq(1, length(inputseq)-windowsize, by = windowsize)
Run Code Online (Sandbox Code Playgroud)

starts = seq(1, nchar(inputseq)-windowsize, by = windowsize)
Run Code Online (Sandbox Code Playgroud)

假设您使用字符向量作为输入eq,例如

slidingwindowplotATGC(3, "ATAGACGATACGATACCCCGAGGGTAGGTA")
Run Code Online (Sandbox Code Playgroud)

ETA:除了这种差异之外,如何使用字符向量还存在一些非常严重的问题。例如:

 windowsize[starts[i]:(starts[i]+9999)]
Run Code Online (Sandbox Code Playgroud)
  1. 为什么看起来您正在从 windowssize 中进行选择,而它只是窗口大小的整数?您是否尝试从 inputeq 中进行选择?

  2. 即使您从 inputeq 中进行选择,执行此操作的方法是substr(inputseq, start, stop)

  3. 它从哪里来starts[i]+9999?你的意思是starts[i]+windowsize

您应该重新开始并仔细考虑您想要做什么,并学习在 R 中执行此操作的正确工具。

ETA:这是您尝试执行的操作的建议重写(您需要首先安装动物园包):

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")
Run Code Online (Sandbox Code Playgroud)

这应该可以帮助您完成大部分工作。之后,你就得靠自己了;-)