将相同的函数应用于R中的多个数据集

时间:2017-04-14 19:22:15

标签: r

我是R的新手,我有25个RNAseq结果样本。我想应用相同的函数来计算我的目标基因(比如基因ABC)与所有25个样本的相关性。

我知道如何单独做到这一点。这是我的代码:

df <- read.table("Sample1.txt", header=T, sep="\t")

# gene expression values of interest
gene <-as.numeric(df["ABC",])

# correlate gene with all others genes in the expression set
correlations <- apply(df,1,function(x){cor(gene,x)})

但现在我有25个。我使用lapply一次阅读它们。

data <- c("Sample1.txt", "Sample2.txt",..."Sample25.txt")
df <- lapply(data, read.table)
names(df) <- data

然而,我迷失了如何将其与上面的其余代码连接以计算基因相关性。我已经阅读了一些相关的线程,但仍然无法弄明白。谁能帮助我?谢谢!

1 个答案:

答案 0 :(得分:2)

你应该这样做:

files <- c("Sample1.txt", "Sample2.txt", ..., "Sample25.txt")

myfunc <- function(file) {
  df <- read.table(file, header=TRUE, sep="\t")

  # gene expression values of interest
  gene <- as.numeric(df["ABC",])

  # correlate gene with all others genes in the expression set
  correlations <- apply(df, 1, function(x) cor(gene, x) )
}

lapply(files, myfunc)

这是我推荐给你的款式。这是我会做的风格:

myfunc <- function(file) {
  df   <- read.table(file, header=TRUE, sep="\t")
  gene <- as.numeric(df["ABC",]) # gene expression values of interest
  apply(df, 1, FUN=cor, y=gene)  # correlate gene with all others
}

files <- c("Sample1.txt", "Sample2.txt", ..., "Sample25.txt")
lapply(files, myfunc)

您可能希望将结果保存到对象:

L <- lapply(files, myfunc)

对于函数甚至可以做(因为cor()接受矩阵参数)):

myfunc <- function(file) {
  df <- read.table(file, header=TRUE, sep="\t")
  cor(t(df), y=as.numeric(df["ABC",])) # correlate gene with all others
}