Thanks for the report, fixed in documentation of mcparallel. Raw vectors
are reserved for internal use and cannot be returned by expressions
passed to mcparallel. But one can indeed wrap a raw vector into a list.
FYI this internal use is not in readChild/mccollect, but in
sendMaster/mcparallel.
Best
Tomas
On 06/21/2018 05:05 AM, Henrik Bengtsson wrote:
I stumbled upon the following:
f <- parallel::mcparallel(raw(0L))
parallel::mccollect(f)
# $`77083`
# NULL
but
f <- parallel::mcparallel(raw(1L))
parallel::mccollect(f)
# Error in unserialize(r) : read error
traceback()
# 2: unserialize(r)
# 1: parallel::mccollect(f)
(restarting because the above appears to corrupt the R session)
f <- parallel::mcparallel(raw(2L))
parallel::mccollect(f)
# Error in unserialize(r) : unknown input format
I can reproduce this on Linux using R 3.5.0 all the way back to R
3.3.2 (didn't try further) and R development (unstable) (2018-06-19
r74919).
Diving into the code of parallel::mccollect(), it looks that the 'raw'
data type has a special purpose:
r <- readChild(pid)
if (is.integer(r) || is.null(r))
fin[pid == pids] <- TRUE
if (is.raw(r))
res[which(pid == pids)] <- list(unserialize(r))
However, I don't see this behavior document in ?parallel::mcparallel.
The closest I get is that under the 'Value' section it says:
"mccollect returns any results that are available in a list. [...]"
Not sure if that should be interpreted as only values that are of type
'list' should be used. OTH, the example use values of type double.
/Henrik
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel