所以我使用函数聚合来实现条件概率表的边缘化,这在控制台行中使用时非常有效。
ab
x probs y
1 F 0.28 T
2 F 0.42 F
3 T 0.24 T
4 T 0.06 F
并使用以下内容:
a = aggregate(probs ~ y , ab, sum)
产生
a
y probs
1 F 0.48
2 T 0.52
这是我想要的以下自定义函数:
marginalizeFactor = function(A, margVar)
{
a = aggregate(probs ~ y + z, A, sum)
return(a)
}
margVar是一个字符串,其中包含要被边缘化的变量的字符(例如magVar =“x”)。
我的问题是,我不知道如何使这个函数适用于被调用的任何类型的字符串字符(该函数不仅适用于具有变量“x”或“y”的表,它也可能是“燃料” “等)。
并且函数聚合似乎不将字符串或列表作为分组变量的有效参数。救命????如何做到以下几点:
marginalizeFactor = function(A, margVar)
{
a = aggregate(probs ~ magVar, A, sum)
return(a)
}
因为margVar
是字符串类型(我的意思是,magVar
不能是margVar = x
,因为会弹出数据类型错误,因此,margVar = "x"
)
答案 0 :(得分:3)
在你的第二个版本中,你有一个错字。 magVar - > margVar。
是的,您不能只在公式中使用字符串。你需要这样的东西。
marginalizeFactor = function(A, margVar) {
a = aggregate(formula(paste("probs ~", margVar)), A, sum)
return(a)
}
marginalizeFactor(ab, 'y')
y probs
1 FALSE 0.48
2 TRUE 0.52
实际上,该功能可能会更好一点
marginalizeFactor = function(A, margVar) {
aggregate(formula(paste("probs ~", margVar)), A, sum)
}