Skip to content

implicit loop for nested list

5 messages · Naresh Gurbuxani, Bert Gunter, Jeff Newmiller +1 more

#
#
Is this what you want:

## This cbinds all the 2 matrix components of mysim
## producing a 2 x 20 matrix
do.call(cbind,lapply(mysim,`[[`,1))

## Change the 1 to a 2 to cbind the other components.

Cheers,
Bert

Tha

On Thu, Jan 26, 2023 at 7:33 PM Naresh Gurbuxani <
naresh_gurbuxani at hotmail.com> wrote:

            

  
  
#
Elegance is in the eyes of the beholder...

extractor <- function( simlist, sim_name ) {
  do.call(
    cbind
  , lapply(
      simlist
    , function( r ) r[[ sim_name ]]
    )
  )
}
extractor( mysim, "two.mat" )

... but using do.call will be much more memory efficient than successive cbind operations.
On January 26, 2023 7:33:25 PM PST, Naresh Gurbuxani <naresh_gurbuxani at hotmail.com> wrote:

  
    
#
I would use replicate() to do an operation with random numbers repeatedly:

```
mysim <- replicate(10, {
    two.mat <- matrix(rnorm(4), 2, 2)
    four.mat <- matrix(rnorm(16), 4, 4)
    list(two.mat = two.mat, four.mat = four.mat)
})
```

which should give you a matrix-list. You can slice this matrix-list
just like normal, then cbind it in one step:

```
two.mat <- do.call("cbind", mysim["two.mat", ])
four.mat <- do.call("cbind", mysim["four.mat", ])
```

On Thu, Jan 26, 2023 at 10:33 PM Naresh Gurbuxani
<naresh_gurbuxani at hotmail.com> wrote:
#
Thanks everyone for their solutions.  My problem is solved.

Sent from my iPhone