首先,如果我问了愚蠢的问题,我想道歉,我只用 R 工作了 2 天,但我必须为我的工作做这件事。
我正在尝试应用一个函数(计算由碱基对名称索引的矩阵乘积),并且我正在使用 Biostrings 来管理大的 DNA 序列。我必须将这些序列“窗口化”为 147 bp 的较短序列,并将函数应用于这些较短的序列。
所以这是我的代码应该是什么样子的 MWE(所有这些代码都是我的,所以它可能是错误的,我仍然不明白 = 和 <- 之间的区别):
MyMWEf <- function(seq, MAT){
#MAT has colnames and rownames "BPs", for example "AG", "TA", etc.
BPs = Views(seq, start = 1:(length(seq)-1), width = 2)
BPs = unlist(lapply(BPs,toString))
#With this I get a list of bps ("AG" "TA" etc.)
AVGs = AVG[BPs, ]
res=sum(AVGs)
}
MyMWE <- function(seq, MAT){
seq <- Biostrings::DNAString(seq)
windows <- Views(seq, start = 1:(length(seq)-146), width = 147)
res = unlist(lapply(windows, MyMWEf, MAT))
}
现在,如果我用它构建一个包并安装并运行它,它会给我以下错误:
error in evaluating the argument 'x' in selecting a method for function 'unlist': Error in as.list.default(X) :
No method to coerce this S4 class to a vector
所以我开始调试,发现问题lapply
实际上出在:它说error during wrapup
. 更具体地说,似乎错误是在尝试执行时出现的as.list(windows)
。但是,如果我做同样的事情但在控制台内没有错误!例如,我可以lapply
毫无问题,lapply(windows,length)
甚至lapply(windows,MyMWEf,MAT)
一切正常(如果我在控制台中定义了 MyMWEf 函数),如果我在控制台中编写“as.list(windows)”,它也可以工作。
如果有人能给我一些关于我做错了什么的见解,我将非常感激!
谢谢
在缩小一点后进行编辑(as.list 问题)。