在函数中使用聚合

时间:2018-03-10 22:56:52

标签: r types aggregate

所以我使用函数聚合来实现条件概率表的边缘化,这在控制台行中使用时非常有效。

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"

1 个答案:

答案 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)
}