【问题标题】:Loop for two codes and two functions in r在r中循环两个代码和两个函数
【发布时间】:2020-02-20 05:45:02
【问题描述】:

我要为我的所有样本编写两个代码。

cr1 = MEDIPS.seqCoverage(file = "1.bam", pattern = "CG", BSgenome = BSgenome, extend = extend, shift = shift, uniq = uniq)
MEDIPS.plotSeqCoverage(seqCoverageObj=cr1, type="pie", cov.level = c(0, 5, 10, 20, 30), main="cr1")

那么,

cr2 = MEDIPS.seqCoverage(file = "2.bam", pattern = "CG", BSgenome = BSgenome, extend = extend, shift = shift, uniq = uniq)    
MEDIPS.plotSeqCoverage(seqCoverageObj=cr2, type="pie", cov.level = c(0, 5, 10, 20, 30), main="cr2")

我不想一次又一次地重复代码 100 次。我尝试了一些 for 循环,但它们无法正常工作,因为“文件 i.bam 未在...中找到”。好吧,我一点也不擅长。有人可以帮帮我吗?

所以我的代码如下所示:

for(i in 1:100){
  cr[i] = MEDIPS.seqCoverage(file = paste0(as.character(i),".bam"),
                             pattern = "CG", BSgenome = BSgenome, extend = extend, 
                             shift = shift, uniq = uniq)
  MEDIPS.plotSeqCoverage(seqCoverageObj=cr[i], type="pie", 
                         cov.level = c(0, 5, 10, 20, 30), main="cr",paste0(as.character(i)))
}

读bam对齐1.bam

导入的短读总数:17254741

扩展读取...

正在创建 GRange 对象...

最多保留一个 1 读取映射到相同的基因组位置。

剩余读取数:11148075

正在加载 BSgenome.Hsapiens.UCSC.hg19 的染色体长度...

获取基因组序列模式位置...

识别出的CG图案数量:26752702

计算序列模式覆盖率...

错误:找不到对象“cr”

【问题讨论】:

  • 你的循环到底是什么样的?如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 对于示例 #1,我需要 cr1 作为向量,“1.bam”作为 bam 文件,“cr1”作为绘图的主标题。对于示例 #2,我需要 cr2、“2.bam”、“cr2”等
  • @JinyongHuang ...如果您向我们展示您运行的文字代码,那就容易多了。不要只是描述它。 确切地向我们展示您尝试了什么。
  • 您需要循环后的所有cr1cr2 对象吗?或者您只是使用用于绘图然后不再需要它们。如果您打算保留它们,那么将它们存储在一个列表中比在全局环境中存储 100 个单独的变量更容易。
  • @MrFlick ThomasIsCoding 的回答解决了我的问题。还是谢谢你。

标签: r


【解决方案1】:

我不确定这是否是您正在关注的事情,但您仍然可以尝试一下,其中类似操作的数量假定为 100,即

list2env(setNames(lapply(paste0(seq(100),".bam"),
                         function(v) MEDIPS.seqCoverage(file = v, pattern = "CG", BSgenome = BSgenome, extend = extend, shift = shift, uniq = uniq)),
                  paste0("cr",seq(100))),
         envir = .GlobalEnv)

sapply(paste0("cr",seq(100)),function(v) MEDIPS.plotSeqCoverage(seqCoverageObj=get(v), type="pie", cov.level = c(0, 5, 10, 20, 30), main=v))

【讨论】:

  • 太棒了!它完全符合我的要求。非常感谢!
  • @JinyongHuang 太好了!如果您认为我的回答有帮助,请考虑点赞/采纳,谢谢!
【解决方案2】:

确保您的工作目录设置正确。 “ File i.bam not found in ...”表示该文件不在您当前所在的目录中。

getwd()

会显示你当前所在的目录。如果文件在下载中,你可以使用

setwd()

将您的目录更改为下载以访问该文件。

评论更新

for(i in 1:100){
cr[i] = MEDIPS.seqCoverage(file = cat(paste0(as.character(i),".bam")),
pattern = "CG", BSgenome = BSgenome, extend = extend, 
shift = shift, uniq = uniq)

MEDIPS.plotSeqCoverage(seqCoverageObj=cr[i], type="pie", 
cov.level = c(0, 5, 10, 20, 30), main=cr[i])
}

【讨论】:

  • 我已经正确设置了工作目录。我的代码一定有问题,找不到我的文件。
  • 知道了,我想我一开始看错了。在你的 for 循环中,试试这个:file = cat(paste0(as.character(i), ".bam").
  • 你不希望cat() 在里面。 cat() 将返回 NULL。 paste0() 应该足以构建字符串。
  • MEDIPS.seqCoverage 中的错误(file = cat(paste0(as.character(i), ".bam")), : 必须指定 bam 或 txt 文件。
  • MEDIPS.plotSeqCoverage 中的错误(seqCoverageObj = cr[i], type = "pie", : object 'cr' not found
猜你喜欢
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多