# 調査結果から種数面積関係を計算する acc.curve <- function(table, area=NULL){ #table:組成表, area:面積表 if (is.null(area)) area <- rep(1,ncol(table)) #面積のデータが無ければ全て1とする o <- rnorm(ncol(table)) #地点数の乱数を発生 o <- order(o) #地点数を並べ替える順番 acc.species <- 0 #累積種数の初期化 acc.area <- 0 #累積面積の初期化 sp.name <- character(0) #種の一覧の初期化 for (i in 1:length(o)){ #地点数だけ繰り返し st <- o[i] #取り出す地点 sub.table <- table[,st] #地点ごとのデータ new.name <- names(sub.table[sub.table>0]) #出現種だけを取り出す sp.name <- union(sp.name, new.name) #出現種の結合 acc.species <- c(acc.species, length(sp.name)) #累積出現種数を追加記入 new.area <- area[st] + max(acc.area) #累積面積 acc.area <- c(acc.area, new.area) #累積面積を追加記入 } cbind(acc.area, acc.species) #面積と種数を統合 } # 使用方法 # 入力データは組成表形式のデータと面積のデータ # 乱数の並べ替えは下記URLを参考にした # http://aoki2.si.gunma-u.ac.jp/R/joseki/sort.html library(vegan) #veganを呼び出してデータduneを使用する data(dune) table <- t(dune) #行列を入れ替え area <- c(rep(1.1,5),rep(1.2,5),rep(2.1,5),rep(3.2,5))# 面積のデータを作成 acc.curve(table,area) #計算結果を出力 plot(acc.curve(table,area)) #計算結果から散布図を作成 for (i in 1:100) points(acc.curve(table,area)) #5回繰り返して散布図を上書き