Goal is to perform rowwise simulation and export the results.
Consider a simple example:
library(tidyverse)
tf <- tibble(a=c(-1,1),b=c(1,2)) ## parameters for simulation
tf1 <- tf %>% rowwise %>% mutate( ## simulate 3 values each row
c=list(rnorm(3,a,b)) ## results need to save in a list
)
print(tf1$c)
As shown here, tf1$c is a list of length 2, each includes 3 numeric values.
The simulation can be otherwise done using a for loop:
tf2 <- matrix(NA,2,3)
for(i in 1:2){
tf2[i,] <- rnorm(3,tf2$a[i],tf2$b[i])
}
How to convert tf1$c into tf2? Any help is appreciated!
If you want the output in that matrix format, you could just skip tidyverse and use apply in this scenario:
t(apply(tf, 1, function(x) rnorm(3, x[1], x[2])))
If you want to use tidyverse, you could use this approach to add to what you've already done:
library(dplyr)
library(tidyr)
tf %>%
rowwise() %>%
mutate( ## simulate 3 values each row
c = list(rnorm(3, a, b)) ## results need to save in a list)
) %>%
unnest_wider(col = c, names_sep = "_") %>% # Get values out of the list column
select(starts_with("c")) %>% # if you only want the "c" columns
as.matrix() # If you want those columns in matrix form