「5/30 MIKUセミナー」について
「21個のアミノ酸,コドンを一生懸命打ったのでメモ」ということだが,21個のアミノ酸というのは,
end <- c("T", "C", "A", "G")
codon <- list(paste("G", "C", end, sep=""),
paste("T", "G", end[1:2], sep=""),
paste("G", "A", end[1:2], sep=""),
paste("G", "A", end[3:4], sep=""),
paste("T", "T", end[1:2], sep=""),
paste("G", "G", end, sep=""),
paste("C", "A", end[1:2], sep=""),
paste("A", "T", end[1:3], sep=""),
paste("A", "A", end[3:4], sep=""),
paste("C", "T", end, sep=""),
paste("A", "T", end[4], sep=""),
paste("A", "A", end[1:2], sep=""),
paste("C", "C", end, sep=""),
paste("C", "A", end[3:4], sep=""),
paste("C", "G", end, sep=""),
paste("T", "C", end, sep=""),
paste("A", "C", end, sep=""),
paste("G", "T", end, sep=""),
paste("T", "G", end[4], sep=""),
paste("T", "A", end[1:2], sep=""))
のあたりのことか?1000個あったら1000行書くか?そんなことないね。データ構造も考えて,以下のように。より簡単に,間違いが少なくなるようにプログラムすることも重要。同じようなことを何行も書くのはダメダメプログラム。間違いの入り込む余地も多くなるので避けるべし。
f1 <- c("G", "T", "G", "G", "T", "G", "C", "A", "A", "C", "A", "A", "C", "C", "C", "T", "A", "G", "T", "T")
s1 <- c("C", "G", "A", "A", "T", "G", "A", "T", "A", "T", "T", "A", "C", "A", "G", "C", "C", "T", "G", "A")
f2 <- c(1,1,1,3,1,1,1,1,3,1,4,1,1,3,1,1,1,1,4,1)
s2 <- c(4,2,2,4,2,4,2,3,4,4,4,2,4,4,4,4,4,4,4,2)
codon <- unname(mapply(function(x, y, i, j) paste(x, y, end[i:j], sep=""), f1, s1, f2, s2))
f1, s1 は文字列として入力(f1 <- "GTGG...GTT")して,バラしてから(f1 <- unlist(strsplit(f1, "")))使うようにすれば,入力はより簡単になる。f2, s2 も同じように文字列で入力してバラして整数化してから使えばよい。
mapply 関数もこんな場合には役に立つ。