# Using replication for user define fuction containing mapply and list of results

I can use the following `MyFun`

(user-defined) function to simulate observations. But failed to figure out how to iterate this function with a function `replicate`

when the function returns a list of output. Any help would be much appreciated. thank

``````MyFun <- function(nSim, Size, Prob) {
M1 <- t(mapply(rbinom, prob = Prob, n = nSim, size = Size))
dimnames(M1) <- list(Prob, paste0("V", 1:nSim))
MeanM1 <- M1/Size
Results1 <- list(M1, MeanM1)
return(Results1)
}

MyFun(nSim=5, Size=4, Prob=c(0.2, 0.4))

[]
V1 V2 V3 V4 V5
0.2  2  2  1  2  1
0.4  2  3  0  3  1

[]
V1   V2   V3   V4   V5
0.2 0.5 0.50 0.25 0.50 0.25
0.4 0.5 0.75 0.00 0.75 0.25
```

```

But doesn't give the desired results with the function `replicate`

.

``````replicate(
n=2
, MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4))
, simplify = "array"
)

[,1]       [,2]
[1,] Integer,10 Integer,10
[2,] Numeric,10 Numeric,10
```

```
+3

source to share

Try adding a simplifying argument to your function and pass it in `mapply()`

.

``````MyFun <- function(nSim, Size, Prob, simplify = "array") {
M1 <- t(
mapply(rbinom, prob = Prob, n = nSim, size = Size, SIMPLIFY = simplify)
)
dimnames(M1) <- list(Prob, paste0("V", 1:nSim))
MeanM1 <- M1/Size
Results1 <- list(M1, MeanM1)
return(Results1)
}
```

```

Then call it like this using `simplify = FALSE`

in `replicate()`

. This will create a list of length 2 with a list of two arrays per element.

``````replicate(2, MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4)), simplify = FALSE)

[]
[][]
V1 V2 V3 V4 V5
0.2  1  0  2  0  0
0.4  2  0  1  1  0

[][]
V1 V2  V3  V4 V5
0.2 0.5  0 1.0 0.0  0
0.4 1.0  0 0.5 0.5  0

[]
[][]
V1 V2 V3 V4 V5
0.2  0  0  0  0  1
0.4  2  1  1  1  0

[][]
V1  V2  V3  V4  V5
0.2  0 0.0 0.0 0.0 0.5
0.4  1 0.5 0.5 0.5 0.0
```

```
+3

source

Your function actually works, it only has "weird" output. Try to save the result to an object named `aa`

.

`````` aa <- replicate(
+     n=2
+     , MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4))
+     , simplify = T
+ )
aa
[,1]       [,2]
[1,] Integer,10 Integer,10
[2,] Numeric,10 Numeric,10
```

```

but each element of this 2 x 2 matrix is ​​itself a matrix. Try the following:

`````` class(aa)
 "matrix"
sapply(aa, class)
 "matrix" "matrix" "matrix" "matrix"
```

```

In fact, if you retrieve the first "cell" of the previous matrix, you will see that it is the matrix that contains the output `MyFun`

:

`````` aa[1,1]
[]
V1 V2 V3 V4 V5
0.2  0  1  0  0  1
0.4  1  2  0  2  0
```

```
+3

source

All Articles