Я нашел что-то очень запутанное, когда я использую множественную обработку для изменения значений в R. data.table.
Я пытался изменить значение на месте с помощью функции.Он работает хорошо, используя одно ядро, и значения в data.table были успешно изменены.Но когда я использовал несколько ядер, мне не удалось изменить значение в data.table.
Это очень смущает меня.Кто-нибудь знает почему?
library(data.table)
library(parallel)
aa <- as.data.table(iris)
aa[,tt:=0]
# modify aa$tt in place
main <- function(x){
#set(aa,x,6L,5)
aa[x,tt:=5]
return(NULL)
}
# aa$tt changed
mclapply(1:nrow(aa), main, mc.cores = 1)
# aa$tt unchanged
mclapply(1:nrow(aa), main, mc.cores = 2)