使用嵌套循环分析上调和下调的基因

时间:2018-11-19 11:23:45

标签: r dplyr bioinformatics

我是R编程的新手,我目前正在寻求分析庞大的基因数据集。我正在尝试更改一个嵌套循环,该循环当前可用于在给定的已调整P值和LogFC值不同的情况下,查看哪些基因上调,但对于下调的基因,它们看起来相同。我为上调的基因生成的是一张4x4表格,用于查看满足我为P调整值和LogFC选择的临界值的基因数量如何变化。 The image shows the coding used for the nested loop当我尝试对下调的基因执行此操作时,我得到的是相同的值-我假设R没有注册任何更改并返回相同的数字。 任何建议将不胜感激。

 #--------------------------------------------------------------------------------
# Function to calculate number of up regulated genes
#--------------------------------------------------------------------------------
get.upregulated.genes <- function(dafra, p.value.max, log.fc.min) {
  gene.count <- subset(dafra, adj.P.Val <= p.value.max & logFC >= log.fc.min) %>% 
    .[["Gene.symbol"]] %>% unique %>% length
  return(gene.count)
}

get.upregulated.genes(dafra=df3, p.value.max=0.05, log.fc.min=1) # 429

p.values <- c(0.001, 0.005, 0.01, 0.05)
log.fcs <- rev(c(0.5, 1, 1.5, 2))
log.fcs
mx.up <- matrix(rep(NA, 16), ncol=4)
mx.up
colnames(mx.up) <- p.values
rownames(mx.up) <- log.fcs

for (x in p.values) {
  for (y in log.fcs) {
    z <- get.upregulated.genes(df3, x, y)
    mx.up[as.character(y),as.character(x)] <- z
  }
}
mx.up
View(mx.up)

for (x in p.values) {
  for (y in log.fcs) {
    z <- get.upregulated.genes(df3, x, y)
    print(x)
    print(y)
    print(z)
    print("------")
  }
}

1 个答案:

答案 0 :(得分:1)

不需要forloops,请尝试类似的操作(未经测试,因为没有示例数据):

# get all combos
x <- expand.grid(
  p.values = c(0.001, 0.005, 0.01, 0.05),
  log.fcs = rev(c(0.5, 1, 1.5, 2)))

# loop rowby then get length of unique genes
apply(x, 1, function(i){
  length(unique(df3[ df3$adj.P.Val <= i[ 1 ] & df3$logFC >= i[ 2 ], "Gene.symbol" ]))
  })