1

首先,如果我问了愚蠢的问题,我想道歉,我只用 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 问题)。

4

1 回答 1

0

您看到的症状是该函数在交互式会话中运行良好,但在包 NAMESPACE 中却不行。

这通常是因为您的包 NAMESPACE 文件中的错误,特别是您需要在包的说明部分中包含该行

Imports: Biostrings

并且在 NAMESPACE 文件中的内容类似于

importMethodsFrom(Biostrings, as.list)

如果你大量使用一个包,那么使用它可能更有意义

import(Biostrings)

Biocondcutor邮件列表将是发布有关使用Biostrings的后续问题的合适位置。

于 2013-09-06T12:40:28.473 回答