2015年2月12日木曜日

Rで変数を使いたくてハマったのでメモ

そこそこ数のあるファイルを読み込んだりする際に、read.tableするだけでも冗長になる
ES1 <- read.table("./ES1/quant_bias_corrected.sf")
ES2 <- read.table("./ES2/quant_bias_corrected.sf")
ES3 <- read.table("./ES3/quant_bias_corrected.sf")
PE1 <- read.table("./PE1/quant_bias_corrected.sf")
PE2 <- read.table("./PE2/quant_bias_corrected.sf")
PE3 <- read.table("./PE3/quant_bias_corrected.sf")
$とかつけて変数として扱ってfor文でまわせたら楽なのにとかおもって
sample <- c("ES1", "ES2", "ES3", "PE1", "PE2", "PE3")
for (i in sample) {
        i <- read.table("./(i)/quant_bias_corrected.sf")
}
とかしても当然ダメですハイ。
それぞれのオブジェクトを別々に作ってもいいけど、どうせその後の処理が一緒ならapply関数使えるようにlistに格納する方が無難。一度pathをリストに格納して読み込んだ表を別のリストに順に格納する。こうすればevalを使わなくてもなんとかなる。
num = 3
filename <- as.list(rep(NA, num))
cell <- as.list(rep(NA, num))

for(i in seq(num)){
    filename[[i]] <- paste("./ES", i, "/quant_bias_corrected.sf", sep="")
    cell[[i]] <- read.table(filename[[i]], sep="\t")
}

for(i in seq(num)){
    filename[[i+num]] <- paste("./PE", i, "/quant_bias_corrected.sf", sep="")
    cell[[i+num]] <- read.table(filename[[i+num]], sep="\t")
}
names(cell) <- c("ES1", "ES2", "ES3", "PE1", "PE2", "PE3")