dlply 函数未应用于子集
dlply function not being applied to subset
数据:
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" 和 "b" 的截距应该不同)。当我尝试这个时:
cen_objects<-dlply(test_dat, .(ID), function(x,y,z) cenreg(Cen(AMT,ND_format)~as.numeric(time)))
我得到一个
"Error in Cen(AMT, ND_format) : object 'AMT' not found"
感谢您的帮助,我是 split-apply-combine 的新手,恐怕我没有正确传递函数。详细的解答对我以后更好的写这些函数有帮助
您遇到的问题出在您提供给 dlply
的函数中。您将其编写为传递了 3 个变量 x
、y
和 z
,并且它仅传递了一个值,即按 ID
分割的数据框块.这就是它找不到任何变量并引发错误的原因。
如果您使用:
cen_objects <- dlply(test_dat, .(ID), function(x) cenreg(Cen(x$AMT,x$ND_format)~as.numeric(x$time)))
它应该工作得很好。
数据:
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" 和 "b" 的截距应该不同)。当我尝试这个时:
cen_objects<-dlply(test_dat, .(ID), function(x,y,z) cenreg(Cen(AMT,ND_format)~as.numeric(time)))
我得到一个
"Error in Cen(AMT, ND_format) : object 'AMT' not found"
感谢您的帮助,我是 split-apply-combine 的新手,恐怕我没有正确传递函数。详细的解答对我以后更好的写这些函数有帮助
您遇到的问题出在您提供给 dlply
的函数中。您将其编写为传递了 3 个变量 x
、y
和 z
,并且它仅传递了一个值,即按 ID
分割的数据框块.这就是它找不到任何变量并引发错误的原因。
如果您使用:
cen_objects <- dlply(test_dat, .(ID), function(x) cenreg(Cen(x$AMT,x$ND_format)~as.numeric(x$time)))
它应该工作得很好。