Хм. Это загадочная проблема. функция oligo::rma()
может быть ошибочной для класса GeneFeatureSet с отдельными выборками. Я заставил его работать с одним образцом, используя функции более низкого уровня, но это означает, что мне также пришлось создавать набор выражений с нуля, указав слоты:
# source("https://bioconductor.org/biocLite.R")
# biocLite("GEOquery")
# biocLite("pd.hg.u133.plus.2")
# biocLite("pd.hugene.1.0.st.v1")
library(GEOquery)
library(oligo)
# # Instead of using .gz files, I extracted the actual CELs.
# # This is just to illustrate how I read in the files; your usage will differ.
# projectDir <- "" # Path to .tar files here
# setwd(projectDir)
# untar("GSE36809_RAW.tar", exdir = "GSE36809")
# untar("GSE59867_RAW.tar", exdir = "GSE59867")
# setwd("GSE36809"); gse3_cels <- dir()
# sapply(paste(gse3_cels, sep = "/"), gunzip); setwd(projectDir)
# setwd("GSE59867"); gse5_cels <- dir()
# sapply(paste(gse5_cels, sep = "/"), gunzip); setwd(projectDir)
#
# Read in CEL
#
# setwd("GSE36809"); gse3_cels <- dir()
# gse3_efs <- read.celfiles(gse3_cels[1])
# # Assuming you've read in the CEL files as a GeneFeatureSet or
# # ExpressionFeatureSet object (i.e. gse3_efs in this example),
# # you can now fit the RMA and create an ExpressionSet object with it:
exprsData <- basicRMA(exprs(gse3_efs), pnVec = featureNames(gse3_efs))
gse3_expset <- new("ExpressionSet")
slot(gse3_expset, "assayData") <- assayDataNew(exprs = exprsData)
slot(gse3_expset, "phenoData") <- phenoData(gse3_efs)
slot(gse3_expset, "featureData") <- annotatedDataFrameFrom(attr(gse3_expset,
'assayData'), byrow = TRUE)
slot(gse3_expset, "protocolData") <- protocolData(gse3_efs)
slot(gse3_expset, "annotation") <- slot(gse3_efs, "annotation")
Надеюсь, что приведенный выше подход будет работать в твой код.
Вы сравниваете систему с методами, реализованными в оптимизированном C, предназначенном для выполнения именно этой задачи, с другой, которую вы собираетесь реализовать на интерпретируемом языке сценариев.
По сути, все, что написано на C, будет работать намного быстрее, чем эквивалентная функция, написанная на PHP, в 10-100 раз.
Как уже отмечалось, нет никаких сомнений в том, что гораздо эффективнее правильно настроить вашу БД и позволить ей выполнять свою работу.
mySQL, без проблем. Он оптимизирован для этого и может использовать индексы. Это было бы ужасно сделать в PHP (и вы бы быстро достигли memory_limit
).