我在R中使用重塑将函数应用于我的数据集的不同变量。
mydata。M是熔体的输出。其中一栏是"诊断",这是一个表示饮食失调的因素,另一栏是"学校标识",这表明受试者就读于哪所学校。我想使用cast对每个Diagnosis应用一个函数。schoolIDEN需要传递给函数。value列包含每个诊断的二进制指示符。(背景:对数千名青少年进行了一系列饮食失调的评估,并对每个诊断和每个青少年进行了诊断编码。)
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
}
基本上,对于每个诊断,我想计算平均值的置信区间,调整学校因素(随机效应)。
然而,我得到一个错误。myFun在调用时找不到group
Error in eval(expr, envir, enclos) :
缺少参数"group",没有默认
不知何故,我的随机效应没有传递给聚合函数。
我可以在没有重塑的情况下做到这一点,通过我的数据帧循环,但我认为这会更快!
问题是聚合函数是分别对每一列执行的。并且你通过...
传递的附加参数不会在与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
子集。我不确定你在数据集中的响应变量名是什么所以你需要设置它