生成参数值的数据框

时间:2019-04-30 14:30:16

标签: r parameters dplyr tidyverse

我正在尝试为参数分析生成参数值的数据框,其中每一行都是一个参数空间。我希望能够自动生成数据帧,以使每个参数的变化范围分别为-10%和+ 10%,而所有其他值保持相同(请参见下面的所需df示例)。有人知道我该怎么做吗?我觉得答案很明显,但是真的看不出来!

所需df的示例:

a <- c(10,9,11,10,10,10,10,10,10)
b <- c(20,20,20,18,22,20,20,20,20)
c <- c(30,30,30,30,30,27,33,30,30)
d <- c(40,40,40,40,40,40,40,36,44)

parms <- data.frame(a,b,c,d)

2 个答案:

答案 0 :(得分:1)

我认为这将使您在示例中显示的“一次更改一个参数”模式。

params <- c(a = 10, b = 20, c = 30, d = 40)

builder_func <- function(params) {
  opts <- map_df(params, ~c(., .*.9, .*1.1))
  stocks <- map_df(params, ~rep(., 3))

  map_df(names(opts),
      ~ bind_cols(
        opts[.],
        stocks[. != names(stocks)]
      )) %>%  
        unique()
}

builder_func(params)

# A tibble: 9 x 4
a     b     c     d
<dbl> <dbl> <dbl> <dbl>
1    10    20    30    40
2     9    20    30    40
3    11    20    30    40
4    10    18    30    40
5    10    22    30    40
6    10    20    27    40
7    10    20    33    40
8    10    20    30    36
9    10    20    30    44

对不起,我第一次阅读您的问题时就错过了这一细微差别。让我知道是否有不正确的事情...

答案 1 :(得分:1)

我认为您正在寻找函数expand.grid

a <- c(9,10,11)
b <- c(18,20,22)
c <- c(27,30,33)
d <- c(36,40,44)
test <- expand.grid(a,b,c,d)

要使第一部分自动化(中心值相差10%),您可以使用以下方法:

library(magrittr)
vary_around_center <- function(center){
  c(center*0.9, center, center*1.1)
}

c(10,20,30,40) %>% 
  lapply(vary_around_center) %>% 
  expand.grid