簡體   English   中英

我將如何使用 purrr 根據場景列表和模擬功能多次運行模擬

[英]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:

  1. 25 行數據(每個場景 5 行)
  2. 結果數據框應包括以下列:x、n、v、場景、結果

我想使用適當的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM