Rの初心者向けコード(生物系)

これを見たらすぐさまRができす。

# # はコメントアウトといって、入力しても無視されます
# たいてい # の後ろに説明が入ります

# 適当なデータを定義する
a1 <- c(1, 2, 4.3, 1.2, 5, 3.2)

# とりあえずプロットする
plot(a1)

# x軸の値を定義する
x <- c(0, 10, 300, 1000, 3000, 10000)

# とりあえず xy でプロット
plot(x, a1)

# x軸を対数軸でプロットする
plot(x, a1, log="x")

# データのばらつきをboxplotで見る
summary(a1)
boxplot(a1)


# 検定する
# 正規分布(norm)からランダム(r)にデータを作成する。
x1 <- rnorm(n=10, mean=0, sd=3) # 仮想データその1
x2 <- rnorm(n=10, mean=1, sd=5) # 仮想データその2

# 検定する前に
# 生データを眺めて差がありそう?
boxplot(x1, x2)

# 使い方を調べる
?t.test
res <- t.test(x1, x2, alternative="two.sided", paired=FALSE, var.equal=FALSE, conf.level=0.95)
res

# p値を取り出したい
str(res)
res$p.value


# ANOVAを行う
x3 <- rnorm(n=10, mean=0.5, sd=5) # 仮想データその3
boxplot(x1, x2, x3)

# group指定というものを、引数formulaによって行う ( ~ のこと)
res <- oneway.test(c(x1, x2, x3) ~ rep(1:3, each=10))

# 地味に全てをt検定したいと思ったら
# for loop を回すことで行う
# 3つデータがあれば、3C2 = 3 つのp値が出る
cmb <- combn(3, 2, simplify=FALSE) # 3C2の重複のない組み合わせ
p.value <- length(cmb) # p値を納めるところ
names(p.value) <- mapply(function(x) paste(paste("x", x, sep=""), collapse=".vs."), cmb) # 名前付け

X <- cbind(x1, x2, x3) # ベクトルを結合して行列化する。ベクトルの長さが合わないとダメ
X

for(i in seq(cmb)){ # i が 1, 2, 3 と順序よく変わる
	tmp.col <- cmb[[i]] # 比較される x? と x?
	tmp.data <- X[, tmp.col] # そのデータ
	tmp.result <- t.test(tmp.data) # 何も考えずt検定をしてみる
	p.value[i] <- tmp.result$p.value
}


# 多重検定補正をしろと言われたのですることにする
p.adj <- p.adjust(p.value, "bonferroni")

# xls ファイルの読み込み(推奨しない)
library(gdata)
read.xls("seika_sample.xlsx", header=TRUE)


### 以下コピペ ###
data1,data2,data3
12,65,2
25,43,2
467,4,66
23,6,34
234,8,5
76,4,4
### ここまで ###
read.table("clipboard", header=TRUE, sep=",")


install.packages("seqinr")
library(seqinr)

base <- c("A", "G", "C", "T") # 使用する塩基
seq1 <- sample(base, size=30, replace=TRUE) # ランダムな塩基配列を作成
table(seq1) # 各塩基の数をカウントする

rev(seq1)  # 逆配列
comp(seq1) # 相補配列

library(phangorn)


phylip <- read.alignment(file = system.file("sequences/test.phylip", package = "seqinr"), format = "phylip")
phyDat <- read.phyDat(file = system.file("sequences/test.phylip", package = "seqinr"), format = "phylip")

tree0 <- NJ(dist.ml(phyDat))
plot(tree0)

# 距離行列を求めて愚直にやる
distmat <- diag(0, length(phylip$seq))
dimnames(distmat) <- list(phylip$nam, phylip$nam)

seq2 <- lapply(phylip$seq, s2c)
# ハミング距離によって距離を計算する
# ハミング距離とは、塩基が違えば1の距離をつける

cmb <- combn(5, 2, simplify=FALSE) # 5C2の重複のない組み合わせ

for(i in seq(cmb)){ # i が 1, 2, 3 と順序よく変わる
	tmp.col <- cmb[[i]] # 比較される seq2[[?]] と seq2[[?]]
	tmp.seq1 <- seq2[[ tmp.col[1] ]]
	tmp.seq2 <- seq2[[ tmp.col[2] ]]
	humming <- tmp.seq1 != tmp.seq2 # 要素同士が等しいかは == , 等しくないかは != で比較できる
	distmat[ tmp.col[1], tmp.col[2] ] <- sum(humming)
}

d <- as.dist(t(distmat)) # 距離行列形式に変換
hcl <- hclust(d)         # クラスタリング
plot(hcl)                # プロット