top of page
  • takaohi

自分が研究でよく使うRコード集

更新日:2023年10月10日

他の人に役に立つかわからないけど、自分はよく使うコードをメモ。

変数名は適宜変更してください。


・数値が文字列として認識されてしまったときに、数値型に戻す


num <- as.numeric(as.character(as.factor(nm)))

・行名がサンプル名、列名が微生物種などのデータフレーム内の数値を相対存在量にする


rel_com <- community/rowSums(community)

・データフレームで複数の列の要素を結合した新しい列を追加


env <- env %>%
    mutate(sample = paste(Site, Plot, sep = "_"))

・factorのlevelsを設定

これをしなければ図などでアルファベット順に出てきてしまう。


env$Landuse <- factor(env$Landuse, levels = c("Natural", "Farm")

順序を逆にするだけなら、


library(forcats)
env$landuse ← fct_rev(env$landuse)

・行の合計カウントの最小値でカウントデータをrarefaction


library(vegan)
rared_com <- rrarefy(community, min(rowSums(community)))

・単位等で出てくる符号や下付き文字など

expressionの()内では、スペースが~, スペース無しが*,下付き文字が["文字列"],上付き文字が^{"文字列"}。

expression内ではハイフンのつもりで-と書いても、−(マイナス)になってしまうので、textstyleでなんとかする。

単位の間の・は、%.%で出すことができる。

boldにするために、-1を\U2212と1に分割。""でかこって文字にしないと太字にしてくれない。boldをしないなら、^{-1}でいい。

例↓

expression(bold(Nitrification~potential~"("*mg~NO["3"]^{'\U2212'}*textstyle("-N")%.%L^{'\U2212'*"1"}%.%h^{'\U2212'*"1"}*")"))


・3つ以上のデータフレームを1つの変数に従って結合する


・p値に従ってアスタリスクをつける

sig <- function(a) {
    if (a > 0.1) {
    return("")
    } else {
    if (a > 0.05) {
    return(".")
    } else {
    if (a > 0.01) {
    return("*")
    } else {
    if (a > 0.001) {
    return("**")
    } else return("***")
    }
    }
    }
    }

#>sig(0.036)
#>"*"

・図内にTwo-way ANOVAなどの結果を表示


・同じ作図の設定で、変数のみ替えてリストに格納


上記リンクを参考にして、実験をいっぱいやった後に、体裁はほどほどに、ぱっと結果だけ知りたいときに使えそうなコードを作りましたので、近日公開。


・forで繰り返して、ファイルを読み込んだり書き出したりする


# 例えば、地点Siteという要因("A", "B", "C")と肥料Fertilizerという要因("Org", "Chem")があるとする
# これらの2要因のすべての組み合わせ、すなわち「Site AかつOrg」、「Site AかつChem」、「Site BかつOrg」、…という組み合わせは3地点×2肥料で6つできる
# その6つすべてに対してvarという変数の計算結果や図を書きだしたいときを考える
env <- env %>%
    mutate(treatment = paste(Site, Fertilizer, sep = "_")) # treatment列を追加
tre <- unique(env$treatment)

# 繰り返し処理で書き出し
library(dplyr)
for (i in length(tre)) {
	env_sub <- env |>
		filter(treatment==tre[i]) # subset
        test <- env_sub$var * 2 # これは適当。任意の計算や統計を行う。
	write.csv(test, sprintf("result.%s.csv", tre[i]), quote = F, row.names = F) # sprintfでtreのi番目の要素を%sに入れてファイル名にすることができる。

	p <- ggplot(env_sub, aes(x = X, y = Y)+
			geom_point()+
			labs(title = tre[i]) # 名前をtreの要素ごとにつけるなど
	ggsave(p, sprintf("figure.%s.png", tre[i]))
}

あと自分が最近よくやるのは、繰り返しやsubsetのためにtreatment列を作ったが、図のタイトルなどにA_Orgなどと書いていてもよくわからないので、以下のようにタイトル用のテキストを繰り返し処理のなかで作ったりしている。


site <- str_split(tre[i], "_")[[1]][1]
fertilizer <- str_split(tre[i], "_")[[1]][2]
title_text <- paste0("Site ", site, " (", fetilizer, ")") # Site A (Org) となる

p <- ggplot(env_sub, aes(x = X, y = Y)+
			geom_point()+
			labs(title = title_text)

・Rで図を作成するときに、ハイフン(-)で出てくるマイナス記号を本物のマイナス記号(−)に変更


閲覧数:79回0件のコメント
bottom of page