我在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;缺少,没有默认
不知何故,我的随机效果没有传递给聚合函数。
我本可以在没有重塑的情况下完成此操作,循环遍历我的数据框,但我认为这会更快!
答案 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
子集。我不确定数据集中的响应变量名是什么,所以你要设置它。