[英]How would I use purrr to run a simulation multiple time based upon a list of scenarios and a simulation function
我想用tibble,DF,情景模式,myscenarios列表,以及一個模擬功能,SIMU,來創建一個結果tibble:
我想使用適當的 purrr 函數來實現這一點。
下面的 reprex 提供了 tibble、五個場景的列表和 simu 函數。 當前輸出僅使用針對 df tibble 的 simu 函數。
lmap 是實現此目的的正確 purrr 函數嗎? 如果是這樣,我是否必須將 lmap 與 mutate 結合使用?
library(tidyverse)
df <- tibble(x= 1:5,
n= c("Jim","John","Jane","Jay","Jack"),
v= 11:15)
myscenarios <- list("one", "two", "three", "four", "five")
simu <- function(x, v){
x * v + sample(1:10, 1)
}
result <- df %>%
mutate(result = simu(x, v))
result
#> # A tibble: 5 x 4
#> x n v result
#> <int> <chr> <int> <int>
#> 1 1 Jim 11 21
#> 2 2 John 12 34
#> 3 3 Jane 13 49
#> 4 4 Jay 14 66
#> 5 5 Jack 15 85
由reprex 包(v0.3.0) 於 2020 年 11 月 23 日創建
我們可以使用map
遍歷名稱list
,在評估 ( !!
) 時使用 assign ( :=
) 將輸出分配給名稱
library(dplyr)
library(purrr)
map_dfc(myscenarios, ~ df %>%
transmute(!! .x := simu(x, v))) %>%
bind_cols(df, .)
-輸出
# A tibble: 5 x 8
# x n v one two three four five
# <int> <chr> <int> <int> <int> <int> <int> <int>
#1 1 Jim 11 16 17 20 13 15
#2 2 John 12 29 30 33 26 28
#3 3 Jane 13 44 45 48 41 43
#4 4 Jay 14 61 62 65 58 60
#5 5 Jack 15 80 81 84 77 79
如果有對應於“myscenarios”元素的函數list
,我們可以用map2
循環,然后應用該函數(假設它們具有相同的參數),在數據集上,使用transmute
返回單個列並綁定原始數據集
lstfn <- list(simu, simu, simu, simu, simu)
map2_dfc(myscenarios, lstfn, ~ df %>%
transmute(!! .x := .y(x, v))) %>%
bind_cols(df, .)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.