我正在尝试为参数分析生成参数值的数据框,其中每一行都是一个参数空间。我希望能够自动生成数据帧,以使每个参数的变化范围分别为-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)
答案 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