Eric - 7 months ago 39

R Question

I have the following function that

`A`

`B`

`n`

`sample_sum (A, B, C, D, E, n, ...)`

Also for the part that I get samples of vector A and B (i.e. in line

`sample_A <- qss(A, n=n, ...)`

`for`

`for`

Thanks

`sample_sum <- function(A, B, n, ...)`

{

qss <- function(X, n, ...)

{

r_X <- range(X)

dens_X <- density(X, ...)

sample(dens_X$x, size=n, prob=dens_X$y, replace=TRUE)

}

sample_A <- qss(A, n=n, ...)

sample_B <- qss(B, n=n, ...)

sample_A + sample_B

}

Answer

I think what you need is the following:

```
new_sample_sum <- function(my_vector_list, n, ...)
{
qss <- function(X, n, ...)
{
r_X <- range(X)
dens_X <- density(X, ...)
sample(dens_X$x, size=n, prob=dens_X$y, replace=TRUE)
}
rowSums(sapply(my_vector_list, qss, n = n))
}
```

You can put multiple vectors **in your vector list** and then do your calculations over the list without worrying about the number of vectors. Just a brief note on the calculations, sapply will loop over all vectors in the list and then return a **table** with all the results of applying qss to each vector (For every vector the result is one column in the table that sapply returns). Since you add the vectors in the final step of your function I do a rowSums of the table with all the results.

And in order to prove the consistency:

```
set.seed(1)
x <- c(1,2,3,4)
y <- c(6,7,9,0)
z <- c(2,2,2,2)
> sample_sum(x, y, n=2)
[1] 6.545129 13.474390
> new_sample_sum(list(x, y), n = 2)
[1] 6.545129 13.474390
```

Or with more vectors:

```
sample_sum <- function(A, B, C, n, ...)
{
qss <- function(X, n, ...)
{
r_X <- range(X)
dens_X <- density(X, ...)
sample(dens_X$x, size=n, prob=dens_X$y, replace=TRUE)
}
sample_A <- qss(A, n=n, ...)
sample_B <- qss(B, n=n, ...)
sample_C <- qss(C, n=n, ...)
sample_A + sample_B + sample_C
}
set.seed(1)
> sample_sum(x, y, z, n = 2)
[1] 6.102482 15.450364
set.seed(1)
> new_sample_sum(list(x, y, z), n = 2)
[1] 6.102482 15.450364
```

Source (Stackoverflow)