[英]How to call multiple distribution functions from different vectors into a function in R
让我们谈谈我的工作流程:
大概的概念
根据 dataframe、select 中的数据,适当的分布函数,以所有可能的方式组合它们以获得组合分布的平均值。
启动 position
df
。 在此示例中,我有不同的变量var1
、 var2
和var3
,其中包含 select 的数据,适当的分布 function。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))
Select 权利分布
在每个var
上使用if_else
我在新向量中生成每个案例的适当分布。 var1
的if_else
看起来像这样,并且对于所有var
具有相同的外观:
df$distr_var1 <- if_else(df$info < 0, "var1_distr1",
if_else(df$info > 0 & df$info < 100, "var1_distr2", "var1_distr3")
这导致以下df
:
df <- data.frame(distr_var1 = c("var1_distr1", "var1_distr3", "var1_distr1", "var1_distr2", "var1_distr2", "var1_distr1", "var1_distr3"),
distr_var2 = c("var2_distr2", "var2_distr1", "var2_distr2", "var2_distr1", "var2_distr3", "var2_distr3", "var2_distr1"),
distr_var3 = c("var3_distr2", "var3_distr3", "var3_distr1", "var3_distr1", "var3_distr2", "var3_distr3", "var3_distr1"))
组合分布函数
为了在新的比例分布 function 中结合分布函数,我根据这个问题创建了这个 function:
foo <- function(...){
#set x values
x <- seq(1, 10, by = 1)
#create y values
y <- 1L
for (fun in list(...)) y <- y * fun(x)
#create new PDF
p <- data.frame(x,y)
pdqr::new_d(p, type = "continuous")
}
我已将 PDF 存储在一个列表中:
PDFS <- list(var1_distr1 = var1_distr1, var1_distr2 = var1_distr2, var1_distr3 = var1_distr3,
var2_distr1 = var2_distr1, var2_distr2 = var2_distr2, var2_distr3 = var2_distr3,
var3_distr1 = var3_distr1, var3_distr2 = var3_distr2, var3_distr3 = var3_distr3)
我想在df
中使用 function foo
为df
中给出的所有分布组合生成比例分布。 因此,对于每种情况,以下组合: var1_var2
、 var1_var3
、 var2_var3
、 var1_var2_var3
。
计算分布的均值
如果我想单独计算分布的平均值,我可以这样做:
means <- sapply(PDFS, pdqr::summ_mean)
df$mean_var1 <- means[df$distr_var1]
或者:
df$mean_var2 <- sapply(mget(df$distr_var2), pdqr::summ_mean)
两种方法都可以正常工作。 但是在组合var1_var2
, var1_var3
, var2_var3
, var1_var2_var3
我还没有找到合适的方法,但尝试了这些:
df$var1_var2_mean <- sapply(foo(mget(mapply(PDFS, sapply, df$distr_var1, df$distr_var2))), pdqr::summ_mean)
我试图通过使用列表来克服不调用函数的问题,但事情似乎变得太复杂/嵌套而无法很好地工作......
问题
如何 select 在distr_var1
, distr_var2
和distr_var3
中给出适当的分布,使用foo
将它们组合并使用pdqr::summ_mean
计算平均值?
我对所有评论感到满意,也对一般的工作流程感到满意
foreach
循环对我有用:
df$var1_var2_mean <- foreach(i = 1:nrow(df), .combine = c) %do% {
A <- as.name(df$var1[i])
B <- as.name(df$var2[i])
mean <- summ_mean(foo(get(A),get(B)))
}
而且,对于每种组合,我都需要这样做。 至少我得到了它的工作...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.