В большинстве случаев, когда вы не заботитесь о результате выполнения этой задачи, это не вызовет никаких проблем.
Но обратите внимание на эту специальную функцию future.get
:
Эффекты согласованности памяти. Действия, выполняемые асинхронным вычислением, происходят до действий, следующих за соответствующим Future.get () в другом потоке.
пример:
int i = 0;
, и если вы дадите
i = 1;
в задаче, затем прочитайте
i
послеfuture.get
, он может гарантировать, что вы получите новое значение1
.Не вызывая
future.get
, вы можете получить устаревшее значение0
.
Решением было бы сохранить всю выходную структуру функции kappa2
в элемент списка и иметь элемент для каждой возможной комбинации столбцов:
# initialization
out_list <- list()
column <- 1
# cycle for storing kappa2's output structure
for (i in 1:(ncol(ex)-1)){
for (j in (i+1):ncol(ex)){
out_list[[column]] <- irr::kappa2(ex[,c(i,j)])
# renaming the elements
names(out_list)[column] <- paste0(i, "_", j)
column <- column + 1
}
}
В Если вам просто нужно значение Каппа для каждой пары столбцов, как вы сказали в комментариях, вы можете использовать следующий (очень похожий на предыдущий) код:
# initialization
# the number of columns of "out" is from mathematics
out <- as.data.frame(matrix(0, nrow = 1, ncol = ncol(ex) * (ncol(ex)-1) / 2))
column <- 1
# cycle for calculation kappa
for (i in 1:(ncol(ex)-1)){
for (j in (i+1):ncol(ex)){
out[1,column] <- irr::kappa2(ex[,c(i,j)])$value
colnames(out)[column] <- paste0(i, "_", j)
column <- column + 1
}
}