r语言 - dlply函数不应用于子集



数据:

test_dat<-data.frame("ID"=c(rep("a",times=19),rep("b",times=20)),
                      "time"=seq(1,39,1),
                      "AMT"=c(0.5,  0.5,    0.5,    0.5,    0.5,    0.5,    0.5,    0.5,    0.5,    0.005,  
                              0.005,    0.005,  0.003,  0.0088, 0.0074, 0.006,  0.0023, 0.0028, 
                              0.0034,0.5,   0.5,    0.5,    0.5,    0.5,    0.5,    0.5,    0.5,    
                              0.5,  0.005,  0.005,  0.005,  0.0037, 0.0088, 0.0079, 0.005,  
                              0.006,    0.0034, 0.0042, 0.0029),
                      "ND_format"=c(TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   
                                    TRUE,   TRUE,   TRUE,   FALSE,  FALSE,  FALSE,  FALSE,  FALSE,  
                                    FALSE,  FALSE,  TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   
                                    TRUE,   TRUE,   TRUE,   TRUE,   TRUE,   FALSE,  FALSE,  FALSE,  TRUE,   
                                    FALSE,  FALSE,  FALSE,  FALSE))

问题:我正在尝试使用NADA软件包来计算审查数据对象上的最大似然回归。我有一个较大的数据集,我想在一个数据范围的子集中应用一个函数。请参阅下面:

library(NADA)
library(plyr)
cen_objects<-dlply(test_dat, .(ID), function(x,y,z) cenreg(Cen(test_dat$AMT,test_dat$ND_format)~as.numeric(test_dat$time)))
summary(cen_objects)
str(cen_objects[[1]])
cen_objects[[1]]@survreg$coefficients
interceptz<-ldply(names(cen_objects),function(x) cen_objects[[x]]@survreg$coefficients)
interceptz$ID<-names(cen_objects)
interceptz  

问题是,当前该功能当前不将功能应用于每个唯一的" ID"(即,对于" A"one_answers" B",截距应该不同)。当我尝试一下时:

cen_objects<-dlply(test_dat, .(ID), function(x,y,z) cenreg(Cen(AMT,ND_format)~as.numeric(time)))

我得到

" cen中的错误(amt,nd_format):未找到对象'amt'

感谢您的帮助,我是新手的分裂型抗结者,恐怕我无法正确通过功能。详细的答案将帮助我将来更好地编写这些功能。

您遇到的问题在于您向dlply提供的功能。您将其写入3个变量xyz,并且仅通过一个值,即ID的数据框架拆分块。这就是为什么它找不到任何变量并引发错误的原因。

如果使用:

cen_objects <- dlply(test_dat, .(ID), function(x) cenreg(Cen(x$AMT,x$ND_format)~as.numeric(x$time)))

它应该可以正常工作。

最新更新