将参数传递给Reshape中的聚合函数(R语言)

时间:2014-05-27 01:15:54

标签: r reshape

我在R中使用Reshape将函数应用于我的数据集的不同变量。

mydata.m是融化的输出。其中的栏目是#34; Diagnosis&#34 ;,一个表示饮食失调的因素,以及schoolIDEN,表示受试者所在的学校。我想使用强制转换将函数应用于每个诊断。 schoolIDEN需要传递给函数。值列包含每个诊断的二进制指示符。 (背景:数千名青少年被评估为一堆饮食失调症,每个诊断和每个青少年的诊断编码。)

cast(mydata.m, Diagnosis ~ ., myFun, group = schoolIDEN) -> temp

myFun如下:

myFun <- function(x, group){
    out.gl <- glmer(x ~ (1|group), family=binomial(link="logit"))
    output <- inv.logit(confint.merMod(out.gl, method="Wald"))
    output
}

基本上,对于每个诊断,我想计算平均值的置信区间,调整schoolIDEN(随机效应)。

但是,我收到了一个错误。 myFun无法找到&#34; group&#34;当它被调用时。

Error in eval(expr, envir, enclos) : 

论证#34;小组&#34;缺少,没有默认

不知何故,我的随机效果没有传递给聚合函数。

我本可以在没有重塑的情况下完成此操作,循环遍历我的数据框,但我认为这会更快!

1 个答案:

答案 0 :(得分:1)

问题是聚合函数是分别为每个列完成的。您通过...传递的其他参数不会在与data.frame相同的环境中进行评估,也不会在相应的组中进行子集化。因此cast对你来说真的是一个不错的选择。

我主要使用基本功能,因此我可以通过拆分data.frame然后运行sapply来进行回归来尝试此操作。像

这样的东西
myFun2 <- function(dd){
    out.gl <- glmer(?response? ~ (1|group), dd family=binomial(link="logit"))
    output <- inv.logit(confint.merMod(out.gl, method="Wald"))
    output
}

dx <- split(my.data, my.data$Diagnosis)
sapply(dx, myFun2)

所以现在myFun2将为每个诊断传递一个data.frame子集。我不确定数据集中的响应变量名是什么,所以你要设置它。