Thank you for your answer!
I agree with you except for the 3 (Error) example and
I realize now I should have started with that in the explanation.
>From my point of view
parLapply(cl = clu, X = 1:2, fun = fun, c = 1)
shouldn't give an error.
This could be easily avoided by using all the argument
names in the custerApply call of parLapply which means changing,
parLapply <- function(cl = NULL, X, fun, ...) {
cl <- defaultCluster(cl)
do.call(c, clusterApply(cl, x = splitList(X, length(cl)),
fun = lapply, fun, ...), quote = TRUE)
}
to
parLapply <- function (cl = NULL, X, fun, ...) {
cl <- defaultCluster(cl)
do.call(c, clusterApply(cl = cl, x = splitList(X, length(cl)),
fun = lapply, fun, ...), quote = TRUE)
}
.
Best regards,
Florian
Gesendet: Mittwoch, 14. März 2018 um 19:05 Uhr
Von: "Henrik Bengtsson" <[email protected]>
An: "Florian Schwendinger" <[email protected]>
Cc: [email protected], R-devel <[email protected]>
Betreff: Re: [Rd] clusterApply arguments
This is nothing specific to parallel::clusterApply() per se. It is the
default behavior of R where it allows for partial argument names. I
don't think there's much that can be done here except always using
fully named arguments to the "apply" function itself as you show.
You can "alert" yourself when there's a mistake by using:
options(warnPartialMatchArgs = TRUE)
e.g.
> clusterApply(clu, x = 1:2, fun = fun, c = 1) ## Error
Warning in clusterApply(clu, x = 1:2, fun = fun, c = 1) :
partial argument match of 'c' to 'cl'
Error in checkCluster(cl) : not a valid cluster
It's still only a warning, but an informative one.
/Henrik
On Wed, Mar 14, 2018 at 8:50 AM, Florian Schwendinger
<[email protected]> wrote:
> Hi!
>
> I recognized that the argument matching of clusterApply (and therefore
> parLapply) goes wrong when one of the arguments of the function is called
> "c". In this case, the argument "c" is used as cluster and the functions give
> the following error message "Error in checkCluster(cl) : not a valid cluster".
>
> Of course, "c" is for many reasons an unfortunate argument name and this can
> be easily fixed by the user side.
>
> See below for a small example.
>
> library(parallel)
>
> clu <- makeCluster(2, "PSOCK")
>
> fun <- function(x0, x1) (x0 + x1)
> clusterApply(clu, x = 1:2, fun = fun, x1 = 1) ## OK
> parLapply(cl = clu, X = 1:2, fun = fun, x1 = 1) #OK
>
>
> fun <- function(b, c) (b + c)
> clusterApply(clu, x = 1:2, fun = fun, c = 1) ## Error
> clusterApply(cl = clu, x = 1:2, fun = fun, c = 1) ## OK
> parLapply(cl = clu, X = 1:2, fun = fun, c = 1) ## Error
>
> stopCluster(clu)
>
>
> I used "R version 3.4.3 Patched (2018-01-07 r74099".
>
>
> Best regards,
> Florian
>
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel[https://stat.ethz.ch/mailman/listinfo/r-devel]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel