使用TFBSTools和for循环进行TFBS搜索

使用TFBSTools和for循环进行TFBS搜索,r,for-loop,R,For Loop,我目前正在寻找DNA中的TFBS基序。我写的寻找10种不同转录因子基序的原始代码运行得很好。但现在我想搜索100多个图案。因此,我想使用循环,这样我就不必手动输入所有的motif名称(如果我的兴趣改变,可以很容易地更改我的列表)。但当我这样做时,我的代码就不再工作了。我可以打印循环的结果,看起来列表包含了所有正确的信息,但是当我用这个列表与我的DNA进行比较时,列表似乎只记得列表的最后一项 以下是我的原始代码: initializeJASPARDB("jaspar.sqlite&quo

我目前正在寻找DNA中的TFBS基序。我写的寻找10种不同转录因子基序的原始代码运行得很好。但现在我想搜索100多个图案。因此,我想使用循环,这样我就不必手动输入所有的motif名称(如果我的兴趣改变,可以很容易地更改我的列表)。但当我这样做时,我的代码就不再工作了。我可以打印循环的结果,看起来列表包含了所有正确的信息,但是当我用这个列表与我的DNA进行比较时,列表似乎只记得列表的最后一项

以下是我的原始代码:

initializeJASPARDB("jaspar.sqlite", version="2014")
MA0018.2 <- getMatrixByID(db, ID="MA0018.2")
MA0024.1 <- getMatrixByID(db, ID="MA0024.1")
MA0062.1 <- getMatrixByID(db, ID="MA0062.1")
MA0099.2 <- getMatrixByID(db, ID="MA0099.2")
MA0112.1 <- getMatrixByID(db, ID="MA0112.1")
MA0153.1 <- getMatrixByID(db, ID="MA0153.1")
MA0156.1 <- getMatrixByID(db, ID="MA0156.1")
MA0157.1 <- getMatrixByID(db, ID="MA0157.1")
MA0158.1 <- getMatrixByID(db, ID="MA0158.1")
MA0259.1 <- getMatrixByID(db, ID="MA0259.1")

pwm1 <- toPWM(MA0018.2)
pwm2 <- toPWM(MA0024.1)
pwm3 <- toPWM(MA0062.1)
pwm4 <- toPWM(MA0099.2)
pwm5 <- toPWM(MA0112.1)
pwm6 <- toPWM(MA0153.1)
pwm7 <- toPWM(MA0156.1)
pwm8 <- toPWM(MA0157.1)
pwm9 <- toPWM(MA0158.1)
pwm10 <- toPWM(MA0259.1)

pwmList <- PWMatrixList(pwm1=pwm1, pwm2=pwm2, pwm3=pwm3, pwm4=pwm4, pwm5=pwm5, pwm6=pwm6, pwm7=pwm7, pwm8=pwm8, pwm9=pwm9, pwm10=pwm10)

seq3 <- readDNAStringSet(file = "sequences/HBV/HBV_genotypeEplusFplusGplusHplusRF.fasta")

sitesetList <- searchSeq(pwmList, seq3, min.score="90%")

as(sitesetList, "data.frame")
as(sitesetList, "DataFrame")
as(sitesetList, "GRanges")
#writeGFF3(sitesetList)
Viruses_TFBS <- writeGFF2(sitesetList)

write.csv(Viruses_TFBS, file = "analysis_HBV/HBV_combmanually_10TFBS.csv")

head(Viruses_TFBS, 5)

initializeJASPARDB(“jaspar.sqlite”,version=“2014”)

MA0018.2您实际上不需要在循环中运行它;这些命令中的大多数都可以处理列表。试着这样做:

库(TFBSTools)
图书馆(JASPAR2018)#如果您愿意,可以使用2014版
图书馆(生物串)

db非常感谢您的回复。这看起来很有希望。遗憾的是,我收到了以下错误消息:“error in
[[您需要将矩阵基序的字符向量传递给
getMatrix
(就像我提供的可复制示例一样),而不是data.frame,我怀疑您的
MyMotions
会是。不知道您的文件的结构,我只能怀疑列表中的第一列很可能是您要传递给函数的motif向量。谢谢。是的,没错。我的csv文件有两列,第一列是motif,第二列是tr的名称描述因子。当我将我的csv作为第1列(MyMotions)的字符向量读取时,如果没有可复制的示例,这是不清楚的。我的可复制示例是否适用于您?确保数据的类别与使用可复制示例的内容相匹配。检查您使用的函数的输入要求(例如,
?getMatrixByID
应向您显示该函数的详细信息).PFMatrixList应该是
PFMatrixList
,MyMotions是字符向量,db应该指向sqlite数据库,SiteSetList应该是
SiteSetList
对象。使用上述命令加载
MyMotions
后,对象
MyMotions
看起来如何?您可以粘贴
dput(MyMotions)的输出
这里,和/或通过查看
str(mymotions)
的输出来检查它。它应该是一个带有数据库ID的字符向量。
TFBS_motifs <- read.csv("TFBS_motifs_test.csv")
seqHSV <- readDNAStringSet(file = "sequences/HSV1.fasta")

# for loop objects
TFBS_matrices <- list()
pwms <- list()
TFBS_ID <- TFBS_motifs$ID

for (i in 1:nrow(TFBS_motifs)) {
  
 pwms[[i]] <- toPWM(TFBS_matrices[[i]] <- getMatrixByID(db, ID = TFBS_ID[[i]]))
  
}
 #print(pwms)

pwmList <- PWMatrixList(pwms[[i]])

sitesetList <- searchSeq(pwmList, seqHSV, min.score="90%")


as(sitesetList, "data.frame")
as(sitesetList, "DataFrame")
as(sitesetList, "GRanges")
#writeGFF3(sitesetList)
HSV_TFBS <- writeGFF2(sitesetList)

write.csv(HSV_TFBS, file = "analysis_HBV/HSV_test.csv")