[R-sig-Geo] joining envelope objects for parallel computing. Possible?

Rolf Turner r.turner at auckland.ac.nz
Mon Sep 12 12:39:47 CEST 2011


On 12/09/11 21:03, Quets Jan wrote:
> Hi,
>
> is it possible to join several envelope (spatstat) objects into a single object?

     See fortune("This is R")

     You could do it, I think, at the expense of writing a bit of additional
     code.  Something along the following lines:

     * For each of your calls to envelope, use the argument savefuns=TRUE.
     * From each of the ENV_OBJ_j, extract the "simfuns" attribute.
     * Change the class of each extracted "simfuns" attribute to 
"data.frame"
        (from c("fv","data.frame")), discard the "r" columns, and then cbind
        them all together; make the result into a *matrix* rather than a
        data frame.  Call it, say, "M".
     * apply the appropriate function across the rows of M, to obtain "lo"
        and "hi"; e.g.

             LH <- t(apply(M,1,function(x,m){x <- sort(x);  
c(x[m],x[length(x)-m+1])},m=5))

        The value "m=5" corresponds to setting "nrank=5" in a ``direct'' 
call to
        envelope().  The first column of LH is "lo"; the second is "hi".

     * These vectors, "lo" and "hi" are then the lower and upper bounds
        respectively of the required envelope.

     The foregoing can be wrapped up in a convenient function.
     Exercise for the reader! :-)

     HTH

         cheers,

             Rolf

P. S.  Not clear to me that this is worth doing; the time consuming part 
is the
simulation of the patterns, which you've already got in the 
"sim_pat_list".  Once
you have the patterns, calculating the summary functions is usually very 
fast,
and hence not worth parallelizing. Unless you have an extraordinarily 
complicated
setting.

             R.
> The reason would be saving computation time with parallel computing.
>
> example:
>
> suppose I already have a list of 120 simulated patterns, called sim_pat_list.
>
> and suppose this is what I want:
>
> ENV_OBJ = envelope(X,fun=pcf,simulate=sim_pat_list)
>
>
> but suppose I have 12 cores available.
>
> and that I split the list sim_pat_list into 10 lists, each comprising 12 patterns, and calculate herefrom 10 envelope objects:
>
> ENV_OBJ_1 = envelope(X,fun=pcf,simulate=sim_pat_list1)
> ENV_OBJ_2 = envelope(X,fun=pcf,simulate=sim_pat_list2)
>
> ENV_OBJ_10 = envelope(X,fun=pcf,simulate=sim_pat_list10)
>
>
> is it then possible to produce something like this (pseudo-code):
>
> ENV_OBJ = join(ENV_OBJ_1, ENV_OBJ_2, ..., ENV_OBJ_10)
>
> to get the same result?
>
> Thank you,
> Jan
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list