R 将函数参数缩减为向量
您好,我正在模拟一个由十几个参数定义的函数:R 将函数参数缩减为向量,r,function,sum,reduce,R,Function,Sum,Reduce,您好,我正在模拟一个由十几个参数定义的函数: 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
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)
)
库(tidyverse)
RMIXP%选择(sim卡,严重性)
是否有一种方法可以修改函数以接受一系列固定的参数,而不是单独定义每个变量?函数本身也可以定义为权重和rexp函数之和吗
谢谢。如果
w
和m
的长度相同,一种解决方案是将它们作为列表提供,并通过循环每个元素进行求和:
rmixexp <- function(n, w, m) {
## Results placeholder
result <- 0
## Loop through w and m
for(element in 1:length(w)) {
result <- result + w[[element]] * rexp(n, 1 / m[[element]])
}
return(result)
}
我希望这能回答您的问题。您能减少您的问题,并包含一个更简单的代码/数据示例吗?例如,是否确实需要定义一个接受23个(!)参数的函数。难道你不能用一个函数来演示核心问题,比如2个参数吗?一般来说,将
列表
(参数)传递给函数可能更容易,而不是单独列出每个参数。
rmixexp <- function(n, w, m) {
## Results placeholder
result <- 0
## Loop through w and m
for(element in 1:length(w)) {
result <- result + w[[element]] * rexp(n, 1 / m[[element]])
}
return(result)
}
rmixexp <- function(n, w, m) {
## Using mapply to go through both lists (same length)
mapply.fun <- function(w, m) {w * rexp(n, 1 / m)}
## Summing up the result of each function
result <- sum(unlist(mapply(mapply.fun, w, m))))
return(result)
}