在R中按行传入向量形式的分布函数计算联合分布均值
问题详情
这是之前两个问题的后续:
- 创建函数
- 计算均值
我有var1、var2、var3三个变量,各自对应不同的分布函数:
var1_distr1 <- pdqr::as_d(function(x)dnorm(x, mean = 3, sd = 1)) var1_distr2 <- pdqr::as_d(function(x)dnorm(x, mean = 6, sd = 1)) var1_distr3 <- pdqr::as_d(function(x)dnorm(x, mean = 2, sd = 2)) var2_distr1 <- pdqr::as_d(function(x)dnorm(x, mean = 5, sd = 3)) var2_distr2 <- pdqr::as_d(function(x)dnorm(x, mean = 3, sd = 1)) var2_distr3 <- pdqr::as_d(function(x)dnorm(x, mean = 4, sd = 2)) var3_distr1 <- pdqr::as_d(function(x)dnorm(x, mean = 4, sd = 1)) var3_distr2 <- pdqr::as_d(function(x)dnorm(x, mean = 5, sd = 1)) var3_distr3 <- pdqr::as_d(function(x)dnorm(x, mean = 7, sd = 2))
为生成匹配多变量对应概率函数的比例分布函数,我编写了如下函数:
foo <- function(...){ # 设置x值 x <- seq(1, 10, by = 1) # 生成y值 y <- 1L for (fun in list(...)) y <- y * fun(x) # 创建新的PDF p <- data.frame(x,y) pdqr::new_d(p, type = "continuous") }
单独调用该函数生成联合分布时运行正常,例如:var2_distr1__var3_distr3 <- foo(var2_distr1, var3_distr3)。
我通过if_else为每个变量的每行选择对应分布,结果存储在数据框df中:
df <- data.frame(var1 = c("var1_distr1", "var1_distr3", "var1_distr1", "var1_distr2", "var1_distr2", "var1_distr1", "var1_distr3"), var2 = c("var2_distr2", "var2_distr1", "var2_distr2", "var2_distr1", "var2_distr3", "var2_distr3", "var2_distr1"), var3 = c("var3_distr2", "var3_distr3", "var3_distr1", "var3_distr1", "var3_distr2", "var3_distr3", "var3_distr1"))
计算单个变量每行分布的均值时可正常运行:
df$var2_distr1_mean <- sapply(mget(df$var2_distr1), pdqr::summ_mean) df$var3_distr3_mean <- sapply(mget(df$var3_distr3), pdqr::summ_mean)
但计算var1和var2对应的联合比例分布均值时出现错误:
> df$var1_2_mean <- mapply(pdqr::summ_mean, foo(df$var1, df$var2)) Error in fun(x) : could not find function "fun"
单独传入分布函数也报错:
> df$var1_2_mean <- mapply(summ_mean, foo(var1_distr1, var2_distr2)) Error in dots[[1L]][[1L]] : object of type 'closure' is not subsettable
按建议将所有PDF存入列表PDFS后,调用仍出现多种错误。我认为问题出在向量化处理上,请问使用invoke_map是否可行?
内容的提问来源于stack exchange,提问作者Johan Vos
相关产品推荐
相关产品推荐

