Скрипт на R для работы - Часть II
# ввожу данные из файла и заменяю в ячейках отсутствующие данные на нули
territoria <- read.csv(file = (description = "e:/10pl.csv"),
sep = ";", h=F, dec = ",")
territoria[is.na(territoria == "NA")] <- 0
# создаю заготовки матриц
# группа основных индексов
v_I_S <- NULL # для индекса Сёренсена
v_I_S <- as.data.frame(v_I_S[length(territoria), length(territoria)])
v_I_J <- NULL # для индекса Жаккара
v_I_J <- as.data.frame(v_I_J[length(territoria), length(territoria)])
v_I_SM <- NULL # для индекса Сокала и Майченера
v_I_SM <- as.data.frame(v_I_SM[length(territoria), length(territoria)])
v_K_Cz <- NULL # для меры Чекановского
v_K_Cz <- as.data.frame(v_K_Cz[length(territoria), length(territoria)])
v_K_R <- NULL # для меры Ружички
v_K_R <- as.data.frame(v_K_R[length(territoria), length(territoria)])
# группа дополнительных индексов
v_I_BB <- NULL # для индекса Браун-Бланке
v_I_BB <- as.data.frame(v_I_BB[length(territoria), length(territoria)])
v_I_SzS <- NULL # для индекса Шимкевича и Симпсона
v_I_SzS <- as.data.frame(v_I_SzS[length(territoria), length(territoria)])
v_I_K1 <- NULL # для первого индекса Кульчинского
v_I_K1 <- as.data.frame(v_I_K1[length(territoria), length(territoria)])
v_I_OB <- NULL # для индекса Отиаи и Баркмана
v_I_OB <- as.data.frame(v_I_OB[length(territoria), length(territoria)])
v_I_SS <- NULL # для индекса Сокала и Снита
v_I_SS <- as.data.frame(v_I_SS[length(territoria), length(territoria)])
v_I_K2 <- NULL # для второго индекса Кульчинского
v_I_K2 <- as.data.frame(v_I_K2[length(territoria), length(territoria)])
v_I_BUB <- NULL # для индекса Барони-Урбани и Бюссера
v_I_BUB <- as.data.frame(v_I_BUB[length(territoria), length(territoria)])
v_K_MH <- NULL # для меры Мориситы и Хорна
v_K_MH <- as.data.frame(v_K_MH[length(territoria), length(territoria)])
# начинаю цикл
for(i in 1:length(territoria)) {
wp_1 <- territoria[, i] # считываю первую выборку
for(j in 1:length(territoria)) {
wp_2 <- territoria[, j] # считываю вторую выборку
# задаю счётные переменные
a <- 0 # число видов, общих для двух списков
b <- 0 # число видов, присутствующих только во втором списке
c <- 0 # число видов, присутствующих только в первом списке
d <- 0 # число видов, отсутствующих в обоих списках, но присутствующих в системе
v_min <- 0 # сумма минимальных обилий из каждой пары
v_max <- 0 # сумма максимальных обилий из каждой пары
mn <- 0 # сумма произведений обилий
sq_1 <- 0 # сумма квадратов обилий на первой площадке
sq_2 <- 0 # сумма квадратов обилий на второй площадке
# выполняю подсчёт основных параметров
for(k in 1:length(wp_1)) {
# считаю числа видов
ifelse(wp_1[k] != 0 & wp_2[k] != 0, a <- a + 1, a <- a)
ifelse(wp_1[k] != 0 & wp_2[k] == 0, b <- b + 1, b <- b)
ifelse(wp_1[k] == 0 & wp_2[k] != 0, c <- c + 1, c <- c)
ifelse(wp_1[k] == 0 & wp_2[k] == 0, d <- d + 1, d <- d)
# считаю суммарные обилия
v_min <- v_min + min(wp_1[k], wp_2[k])
v_max <- v_max + max(wp_1[k], wp_2[k])
# считаю сумму произведений обилий
mn <- mn + wp_1[k] * wp_2[k]
# считаю сумму квадратов обилий
sq_1 <- sq_1 + wp_1[k]^2
sq_2 <- sq_2 + wp_2[k]^2
}
# подсчитываю число видов в каждой выборке
S_1 <- length(wp_1) - length(which(wp_1 == 0))
S_2 <- length(wp_2) - length(which(wp_2 == 0))
# подсчитываю суммарное обилие по каждой выборке
v_S_1 <- sum(wp_1)
v_S_2 <- sum(wp_2)
# рассчитываю индексы и заполняю матрицы
# группа основных индексов
I_S <- (2 * a) / ((a + b) + (a + c)) # считаю индекс Сёренсена
v_I_S[i, j] <- I_S # заношу его в соответствующую ячейку
I_J <- a / (a + b + c) # считаю индекс Жаккара
v_I_J[i, j] <- I_J # заношу его в соответствующую ячейку
I_SM <- (a + d) / (a + b + c + d) # считаю индекс Сокала и Майченера
v_I_SM[i, j] <- I_SM # заношу его в соответствующую ячейку
K_Cz <- 2 * v_min / (v_S_1 + v_S_2) # считаю меру Чекановского
v_K_Cz[i, j] <- K_Cz # заношу её в соответствующую ячейку
K_R <- v_min / v_max # считаю меру Ружички
v_K_R[i, j] <- K_R # заношу её в соответствующую ячейку
# группа дополнительных индексов
I_BB <- a / max(S_1, S_2) # считаю индекс Браун-Бланке
v_I_BB[i, j] <- I_BB # заношу его в соответствующую ячейку
I_SzS <- a / min(S_1, S_2) # считаю индекс Шимкевича и Симпсона
v_I_SzS[i, j] <- I_SzS # заношу его в соответствующую ячейку
I_K1 <- (a / 2) * (1 / (a + b) + 1 / (a + c)) # считаю первый индекс Кульчинского
v_I_K1[i, j] <- I_K1 # заношу его в соответствующую ячейку
I_OB <- a / sqrt((a + b) * (a + c)) # считаю индекс Отиаи и Баркмана
v_I_OB[i, j] <- I_OB # заношу его в соответствующую ячейку
I_SS <- a / (2 * (a + b + c) - a) # считаю индекс Сокала и Снита
v_I_SS[i, j] <- I_SS # заношу его в соответствующую ячейку
I_K2 <- a / (b + c) # считаю второй индекс Кульчинского
v_I_K2[i, j] <- I_K2 # заношу его в соответствующую ячейку
I_BUB <- (sqrt(a * d) + a) / (sqrt(a * d) + a + b + c) # считаю индекс Барони-Урбани и Бюссера
v_I_BUB[i, j] <- I_BUB # заношу его в соответствующую ячейку
K_MH <- (2 * mn) / ((sq_1 / (S_1^2) + sq_2 / (S_2^2)) * S_1 * S_2) # считаю меру Мориситы и Хорна
v_K_MH[i, j] <- K_MH # заношу её в соответствующую ячейку
}
}