Как изменить внешний объект внутри parSapply в R? - PullRequest
0 голосов
/ 06 декабря 2018

Предположим, у нас есть:

  • full_data как фрейм данных с измерениями: 1000x110,
  • inputs_indexes как вектор значений: 1:100,
  • labels_indexes как вектор значений: 101:110,
  • ext_obj = array(NA, c(100, 100, 10)), определенный в файле непосредственно перед использованием метода parSapply().

Я бы хотел изменить его параллельно, поэтому я готовлю среду следующим образом:

socket_cluster = makeCluster(detectCores() - 1)
clusterEvalQ(socket_cluster, require(infotheo))
clusterExport(socket_cluster, c("full_data", "labels_indexes", "ext_obj"))

Невозможно изменить ext_obj при выполнении следующего кода:

sapply(labels_indexes, function(label)
{
  parSapply(socket_cluster, inputs_indexes, function(candidate)
  {
    sapply(1:candidate, function(taken)
    {
      ext_obj[candidate, taken, label - 100] <<- interinformation(data.frame(full_data[, candidate], full_data[, taken], full_data[, label]))
    })
  })
})

Есть ли способ сделать параллельные вычисления для одного объекта?

...