【发布时间】:2019-08-10 14:46:24
【问题描述】:
您好,我正在模拟一个定义了十几个参数的函数:
library(tidyverse)
rmixexp <- function(n, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, m1, m2,
m3, m4, m5, m6, m7, m8, m9, m10, m11) {
w1 * rexp(n, 1 / m1) +
w2 * rexp(n, 1 / m2) +
w3 * rexp(n, 1 / m2) +
w4 * rexp(n, 1 / m5) +
w5 * rexp(n, 1 / m5) +
w6 * rexp(n, 1 / m6) +
w7 * rexp(n, 1 / m7) +
w8 * rexp(n, 1 / m8) +
w9 * rexp(n, 1 / m9) +
w10 * rexp(n, 1 / m10) +
w11 * rexp(n, 1 / m11)
}
datatibble <- tibble(
w1 = c(1/11, 1/11),
w2 = c(1/11, 1/11),
w3 = c(1/11, 1/11),
w4 = c(1/11, 1/11),
w5 = c(1/11, 1/11),
w6 = c(1/11, 1/11),
w7 = c(1/11, 1/11),
w8 = c(1/11, 1/11),
w9 = c(1/11, 1/11),
w10 = c(1/11, 1/11),
w11 = c(1/11, 1/11),
m1 = c(1/11, 1/11),
m2 = c(1/11, 1/11),
m3 = c(1/11, 1/11),
m4 = c(1/11, 1/11),
m5 = c(1/11, 1/11),
m6 = c(1/11, 1/11),
m7 = c(1/11, 1/11),
m8 = c(1/11, 1/11),
m9 = c(1/11, 1/11),
m10 = c(1/11, 1/11),
m11 = c(1/11, 1/11)
)
这导致了一个笨拙的函数,如下所示:
从函数模拟...
n <- 10
loss.test <- datatibble %>% mutate(severity =
pmap(
list(n, w1, w2, w3, w4, w5,
w6, w7, w8, w9, w10, w11,
m1, m2, m3, m4, m5,
m6, m7, m8, m9, m10, m11),
function(n, w1, w2, w3, w4, w5,
w6, w7, w8, w9, w10, w11,
m1, m2, m3, m4, m5,
m6, m7, m8, m9, m10, m11)
rmixexp(n, w1, w2, w3, w4, w5,
w6, w7, w8, w9, w10, w11,
m1, m2, m3, m4, m5,
m6, m7, m8, m9, m10, m11))
) %>%
mutate(severity = map(severity, ~ data.frame(severity = .x,
sim = seq_along(.x)))) %>%
unnest() %>% select(sim, severity)
有没有一种方法可以修改函数以接受一系列固定的参数,而不是单独定义每个变量?也可以将函数本身定义为权重和 rexp 函数的总和吗?
谢谢。
【问题讨论】:
-
你能减少你的问题并包含一个更简单的代码/数据示例吗?例如,是否真的有必要定义一个接受 23 个(!)参数的函数。你不能用一个函数来证明核心问题吗? 2个论据?一般来说,将
list(参数)传递给函数可能更容易,而不是单独列出每个参数。