2012-04-09 337 views
0

在我的自定義函數中,我遇到了一個奇怪的問題。R告訴我「找不到對象'train'

我正在寫一個函數做logistic和clogit(生存)迴歸交叉驗證。因此我需要生成一個訓練集和測試集。我已經標記了要完成它的部分。

我需要比較經典邏輯迴歸和條件邏輯迴歸。因此,我使用'if'語句來區分這兩個函數。

以下是問題。看起來,glm函數可以找到火車矢量並且做得很好,但是火車找不到它!即使火車矢量輸出正確。

當我測試我的函數gcv的每一行時,clogit再次工作。 有人可以告訴我爲什麼鐵軌不與列車一起工作?

我調用此函數爲:

gcv(as.numeric(FNDX)~HIGD+DEG+CHK+AGP1+AGMN+NLV+LIV+WT+AGLP+MST+strata(STR),bbdm,method="clogit") 

和錯誤消息

Error in `[.data.frame`(bbdm, train,) : object 'train' not found 

你需要回溯()的信息?

和數據集是bbdm13 in http://www.umass.edu/statdata/statdata/stat-logistic.html。 有NA在原始數據或代碼:)

相關碼是如下之後使用示例:

gcv<-function(formula,data=NULL,method="rpart",cross=5,times=10,k=7,layer=5,seed=0) 
{ 

    set=data; 
n=nrow(set); 
set.seed(as.vector(Sys.time())); 
bb1=1:n; 
bb2=rep(1:cross,ceiling(n/cross))[1:n]; 
bb2=sample(bb2,n); 
samp=sample(c(1:n),size=n); 
m=ceiling(n/cross); 
smp<-mat.or.vec(cross,m); 
j=rep(0,cross) 
for (i in 1:n) 
{ 
    smp[bb2[i],j[bb2[i]]]=i 
    j[bb2[i]]=j[bb2[i]]+1 
} 
# Here we separate the original set into 5(variable cross)sets, 
    # each time we take one out and treat it as the testing set 

mf <- match.call(expand.dots = FALSE) 
m <- match(c("formula","data"), names(mf), 0L) 
mf <- mf[c(1L, m)] 
mf$drop.unused.levels <- TRUE 
mf[[1L]] <- as.name("model.frame") 
mf <- eval(mf, parent.frame()) 
response<-model.response(mf) 
#code copied from function.lm 

reslvl<-length(levels(response)) 
tra<-mat.or.vec(reslvl,reslvl); 
tes<-mat.or.vec(reslvl,reslvl); 

for (i in 1:cross) 
{ 
    test<-smp[i,]; 
    train<-setdiff(1:200,test); 
    show(train); #THe 'train' set can be shown here. 

    #some "if" and "else"statements are hidden 

    if (method=="logistic")#logistic is running well 
    { 
     bb.log<-step(glm(formula,set,family=binomial),trace=FALSE) 
     tra<-tra+as.vector(t(table(response[train], 
             bin(predict.glm(bb.log,set[train,],type="response"))))) 
     tes<-tes+as.vector(t(table(response[test], 
             bin(predict.glm(bb.log,set[test,],type="response"))))) 
    } 
    else if (method=="clogit")#clogit is meeting a problem. 
    { 
     library("survival") 
     bb.clog<-step(clogit(formula,bbdm[train,]),trace=FALSE) 
     tra<-tra+as.vector(t(table(response[train], 
               bin(predict(bb.clog,set[train,]))))) 
     tes<-tes+as.vector(t(table(response[test], 
               bin(predict(bb.clog,set[test,]))))) 
    } 
} 
tra<-tra/cross; 
tes<-tes/cross; 
trainrate=1-sum(diag(tra))/sum(tra) 
testrate=1-sum(diag(tes))/sum(tes) 
result<-list(Train=tra,TrainRate=trainrate,Test=tes,TestRate=testrate) 
result 
} 

示例數據:

STR OBS AGMT FNDX HIGD DEG CHK AGP1 AGMN NLV LIV WT AGLP MST 
1 1 1 39 1 9 0 1 23 13 0 5 118 39 1 
2 1 2 39 0 10 0 2 16 11 1 3 175 39 3 
3 1 3 39 0 11 0 2 20 12 1 3 135 39 2 
4 1 4 39 0 12 1 1 21 11 0 3 125 40 1 
5 2 1 38 1 14 2 1 24 14 1 3 118 39 1 
6 2 2 38 0 12 1 2 20 15 0 2 183 38 1 
7 2 3 38 0 9 0 2 19 11 0 5 218 38 1 
8 2 4 38 0 13 1 1 23 13 0 2 192 37 1 
9 3 1 38 1 9 0 1 22 15 2 2 125 38 1 
10 3 2 38 0 10 0 2 20 14 0 2 123 38 1 
11 3 3 38 0 15 1 1 19 13 3 2 140 37 1 
12 3 4 38 0 12 1 1 18 13 0 2 160 38 1 
13 4 1 38 1 15 1 1 24 14 2 3 150 38 5 
14 4 2 38 0 15 2 1 26 13 1 1 130 38 2 
15 4 3 38 0 12 1 2 23 14 0 4 140 38 1 
16 4 4 38 0 12 1 1 25 16 0 2 130 38 1 
17 5 1 38 1 12 1 1 21 17 0 2 150 38 2 
18 5 2 38 0 12 1 2 20 12 1 2 148 38 1 
19 5 3 38 0 14 2 1 22 13 0 2 134 39 1 
20 5 4 38 0 13 1 1 16 14 0 6 138 38 4 
21 6 1 38 1 13 1 1 24 12 1 3 116 39 1 
22 6 2 38 0 12 1 2 19 12 0 2 145 35 2 
23 6 3 38 0 14 2 2 21 10 4 3 195 35 1 
24 6 4 38 0 14 4 1 25 8 0 1 180 38 2 
25 7 1 37 1 17 4 1 26 13 1 4 137 37 5 
26 7 2 37 0 15 2 1 20 11 2 2 135 37 2 
27 7 3 37 0 9 0 1 18 10 2 3 155 37 1 
28 7 4 37 0 12 1 2 22 13 2 2 120 38 1 
29 8 1 36 1 12 1 1 23 14 0 2 126 36 2 
30 8 2 36 0 10 0 1 20 12 1 2 191 36 1 
31 8 3 36 0 10 0 2 17 10 1 3 185 37 1 
32 8 4 36 0 12 1 2 23 12 0 2 119 37 1 
33 9 1 35 1 12 1 1 23 14 0 3 129 36 1 
34 9 2 35 0 14 1 2 21 11 0 3 170 34 2 
35 9 3 36 0 12 1 1 22 14 0 4 110 36 1 
36 9 4 35 0 14 2 2 24 11 0 2 155 35 1 
37 10 1 35 1 12 1 2 21 12 0 2 105 29 1 
38 10 2 36 0 17 3 1 26 13 1 2 115 36 1 
39 10 3 36 0 12 1 2 22 12 2 3 120 36 1 
40 10 4 36 0 12 1 1 33 16 0 1 150 36 1 

結構:

structure(list(STR = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 
6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 10L, 10L, 
10L, 10L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 
13L, 14L, 14L, 14L, 14L, 15L, 15L, 15L, 15L, 16L, 16L, 16L, 16L, 
17L, 17L, 17L, 17L, 18L, 18L, 18L, 18L, 19L, 19L, 19L, 19L, 20L, 
20L, 20L, 20L, 21L, 21L, 21L, 21L, 22L, 22L, 22L, 22L, 23L, 23L, 
23L, 23L, 24L, 24L, 24L, 24L, 25L, 25L, 25L, 25L, 26L, 26L, 26L, 
26L, 27L, 27L, 27L, 27L, 28L, 28L, 28L, 28L, 29L, 29L, 29L, 29L, 
30L, 30L, 30L, 30L, 31L, 31L, 31L, 31L, 32L, 32L, 32L, 32L, 33L, 
33L, 33L, 33L, 34L, 34L, 34L, 34L, 35L, 35L, 35L, 35L, 36L, 36L, 
36L, 36L, 37L, 37L, 37L, 37L, 38L, 38L, 38L, 38L, 39L, 39L, 39L, 
39L, 40L, 40L, 40L, 40L, 41L, 41L, 41L, 41L, 42L, 42L, 42L, 42L, 
43L, 43L, 43L, 43L, 44L, 44L, 44L, 44L, 45L, 45L, 45L, 45L, 46L, 
46L, 46L, 46L, 47L, 47L, 47L, 47L, 48L, 48L, 48L, 48L, 49L, 49L, 
49L, 49L, 50L, 50L, 50L, 50L), .Label = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", 
"27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", 
"38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", 
"49", "50"), class = "factor"), OBS = structure(c(1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L), .Label = c("1", "2", "3", "4"), class = "factor"), 
AGMT = c(39L, 39L, 39L, 39L, 38L, 38L, 38L, 38L, 38L, 38L, 
38L, 38L, 38L, 38L, 38L, 38L, 38L, 38L, 38L, 38L, 38L, 38L, 
38L, 38L, 37L, 37L, 37L, 37L, 36L, 36L, 36L, 36L, 35L, 35L, 
36L, 35L, 35L, 36L, 36L, 36L, 35L, 35L, 35L, 35L, 34L, 35L, 
34L, 34L, 33L, 33L, 32L, 33L, 33L, 33L, 33L, 33L, 32L, 32L, 
32L, 32L, 31L, 30L, 31L, 31L, 68L, 68L, 68L, 68L, 64L, 64L, 
64L, 64L, 63L, 63L, 63L, 63L, 62L, 62L, 62L, 62L, 61L, 61L, 
61L, 61L, 61L, 62L, 62L, 61L, 61L, 62L, 61L, 61L, 61L, 61L, 
61L, 61L, 60L, 60L, 60L, 60L, 58L, 58L, 58L, 58L, 55L, 55L, 
55L, 55L, 55L, 55L, 55L, 55L, 52L, 52L, 52L, 52L, 52L, 52L, 
52L, 52L, 51L, 51L, 51L, 51L, 49L, 49L, 49L, 49L, 48L, 48L, 
48L, 48L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 46L, 46L, 
46L, 46L, 46L, 46L, 46L, 46L, 45L, 45L, 45L, 45L, 45L, 45L, 
45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 45L, 44L, 44L, 
44L, 44L, 44L, 44L, 44L, 44L, 43L, 43L, 43L, 43L, 28L, 27L, 
28L, 28L, 53L, 53L, 53L, 53L, 56L, 56L, 56L, 56L, 41L, 41L, 
41L, 41L, 41L, 41L, 40L, 41L, 41L, 42L, 41L, 41L), FNDX = structure(c(2L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor"), 
HIGD = c(9L, 10L, 11L, 12L, 14L, 12L, 9L, 13L, 9L, 10L, 15L, 
12L, 15L, 15L, 12L, 12L, 12L, 12L, 14L, 13L, 13L, 12L, 14L, 
14L, 17L, 15L, 9L, 12L, 12L, 10L, 10L, 12L, 12L, 14L, 12L, 
14L, 12L, 17L, 12L, 12L, 20L, 10L, 12L, 14L, 12L, 18L, 12L, 
12L, 20L, 15L, 12L, 14L, 18L, 12L, 13L, 18L, 12L, 12L, 15L, 
12L, 17L, 10L, 13L, 13L, 14L, 8L, 16L, 12L, 12L, 20L, 13L, 
12L, 10L, 12L, 5L, 12L, 12L, 12L, 16L, 10L, 8L, 13L, 8L, 
16L, 11L, 9L, 15L, 14L, 12L, 18L, 6L, 12L, 10L, 8L, 12L, 
8L, 13L, 12L, 11L, 13L, 12L, 12L, 13L, 12L, 14L, 12L, 12L, 
11L, 12L, 12L, 12L, 10L, 12L, 14L, 8L, 12L, 12L, 14L, 9L, 
12L, 7L, 16L, 15L, 15L, 20L, 12L, 12L, 14L, 17L, 12L, 12L, 
12L, 17L, 15L, 12L, 10L, 12L, 10L, 11L, 17L, 10L, 12L, 14L, 
8L, 12L, 12L, 12L, 11L, 12L, 12L, 8L, 13L, 12L, 12L, 12L, 
19L, 12L, 12L, 13L, 12L, 17L, 12L, 16L, 14L, 16L, 18L, 12L, 
12L, 12L, 12L, 12L, 12L, 16L, 16L, 12L, 12L, 16L, 11L, 12L, 
12L, 16L, 12L, 12L, 11L, 12L, 12L, 16L, 12L, 12L, 12L, 12L, 
16L, 10L, 11L, 15L, 12L, 14L, 10L, 15L, 13L), DEG = structure(c(1L, 
1L, 1L, 2L, 3L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 3L, 2L, 2L, 
2L, 2L, 3L, 2L, 2L, 2L, 3L, 5L, 5L, 3L, 1L, 2L, 2L, 1L, 1L, 
2L, 2L, 2L, 2L, 3L, 2L, 4L, 2L, 2L, 5L, 1L, 2L, 2L, 2L, 5L, 
2L, 2L, 5L, 2L, 2L, 3L, 5L, 2L, 2L, 5L, 2L, 2L, 2L, 2L, 4L, 
1L, 2L, 2L, 3L, 1L, 4L, 2L, 2L, 5L, 2L, 2L, 1L, 2L, 1L, 2L, 
2L, 2L, 4L, 1L, 1L, 2L, 1L, 4L, 1L, 1L, 3L, 2L, 2L, 5L, 1L, 
2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 3L, 2L, 3L, 2L, 
2L, 1L, 2L, 2L, 2L, 1L, 2L, 3L, 1L, 2L, 2L, 3L, 1L, 2L, 1L, 
4L, 3L, 3L, 5L, 2L, 2L, 3L, 5L, 2L, 2L, 2L, 5L, 2L, 2L, 1L, 
2L, 1L, 1L, 4L, 1L, 2L, 3L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
2L, 2L, 2L, 2L, 5L, 2L, 2L, 2L, 2L, 5L, 2L, 4L, 2L, 4L, 5L, 
2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 2L, 2L, 4L, 1L, 2L, 2L, 4L, 
2L, 2L, 1L, 2L, 2L, 4L, 2L, 2L, 2L, 2L, 4L, 1L, 1L, 2L, 2L, 
2L, 1L, 2L, 2L), .Label = c("0", "1", "2", "3", "4"), class = "factor"), 
CHK = structure(c(1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 
1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 
2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 
1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 
2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 
1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 
2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L), .Label = c("1", 
"2"), class = "factor"), AGP1 = c(23, 16, 20, 21, 24, 20, 
19, 23, 22, 20, 19, 18, 24, 26, 23, 25, 21, 20, 22, 16, 24, 
19, 21, 25, 26, 20, 18, 22, 23, 20, 17, 23, 23, 21, 22, 24, 
21, 26, 22, 33, 26, 18, 19, 21, 25, 27, 20, 25, 26, 21, 24, 
25, 28, 21, 20, 21, 30, 25, 20, 23, 30, 21, 23, 24, 22, 34, 
23, 19, 30, 28, 26, 25, 21, 24, 24, 24, 26, 26, 32, 22, 28, 
26, 28, 27, 22, 30, 25, 26, 26, 33, 25, 29, 21, 18, 22, 23, 
28, 25, 24, 33, 20, 25, 24, 24, 30, 30, 30, 24, 24, 23, 16, 
26, 24, 28, 20, 25, 23, 21, 23, 20, 24, 24, 22, 24, 25, 25, 
24, 25, 22, 22, 23, 19, 26, 20, 24, 22, 19, 23, 23, 21, 27, 
19, 26, 15, 27, 23, 22, 17, 33, 25, 20, 22, 24, 23, 20, 30, 
18, 22, 30, 22, 25, 23, 23, 23, 25, 27, 27, 25, 24, 22, 23, 
18, 27, 31, 14, 20, 29, 22, 20, 23, 29, 28, 23, 26, 21, 27, 
26, 25, 25, 20, 21, 22, 40, 21, 21, 26, 34, 21, 30, 21), 
AGMN = c(13L, 11L, 12L, 11L, 14L, 15L, 11L, 13L, 15L, 14L, 
13L, 13L, 14L, 13L, 14L, 16L, 17L, 12L, 13L, 14L, 12L, 12L, 
10L, 8L, 13L, 11L, 10L, 13L, 14L, 12L, 10L, 12L, 14L, 11L, 
14L, 11L, 12L, 13L, 12L, 16L, 11L, 13L, 11L, 12L, 10L, 13L, 
11L, 16L, 14L, 11L, 12L, 12L, 14L, 12L, 13L, 13L, 13L, 11L, 
9L, 16L, 14L, 14L, 11L, 13L, 12L, 14L, 13L, 12L, 14L, 14L, 
11L, 10L, 15L, 12L, 14L, 11L, 16L, 15L, 12L, 12L, 14L, 13L, 
15L, 14L, 16L, 11L, 15L, 13L, 17L, 11L, 13L, 13L, 15L, 13L, 
17L, 15L, 17L, 11L, 13L, 15L, 12L, 16L, 12L, 10L, 16L, 13L, 
12L, 14L, 14L, 14L, 12L, 15L, 12L, 12L, 14L, 13L, 14L, 12L, 
11L, 11L, 16L, 12L, 13L, 13L, 14L, 12L, 13L, 13L, 11L, 11L, 
12L, 11L, 14L, 12L, 14L, 13L, 12L, 15L, 13L, 12L, 15L, 11L, 
13L, 13L, 12L, 12L, 11L, 13L, 14L, 13L, 11L, 11L, 12L, 11L, 
12L, 12L, 15L, 17L, 13L, 10L, 16L, 12L, 13L, 12L, 12L, 13L, 
14L, 13L, 15L, 15L, 12L, 17L, 15L, 12L, 12L, 14L, 12L, 12L, 
11L, 16L, 12L, 11L, 12L, 11L, 17L, 11L, 13L, 12L, 16L, 13L, 
14L, 12L, 15L, 16L, 12L, 14L, 13L, 13L, 12L, 12L), NLV = c(0, 
1, 1, 0, 1, 0, 0, 0, 2, 0, 3, 0, 2, 1, 0, 0, 0, 1, 0, 0, 
1, 0, 4, 0, 1, 2, 2, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 
0, 0, 2, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 
1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 
0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 
0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 2, 1, 0, 2, 
0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 
0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 1, 1, 0, 1, 
0, 0, 0, 4, 1, 0, 0, 1, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 1, 0, 
0, 0, 0, 0, 2, 1, 1, 1, 0), LIV = c(5, 3, 3, 3, 3, 2, 5, 
2, 2, 2, 2, 2, 3, 1, 4, 2, 2, 2, 2, 6, 3, 2, 3, 1, 4, 2, 
3, 2, 2, 2, 3, 2, 3, 3, 4, 2, 2, 2, 3, 1, 4, 2, 3, 2, 1, 
4, 3, 1, 4, 1, 2, 2, 5, 2, 2, 1, 1, 2, 2, 2, 0, 3, 2, 3, 
3, 3, 3, 7, 3, 3, 5, 2, 5, 2, 3, 3, 3, 2, 2, 3, 3, 1, 3, 
2, 4, 1, 4, 3, 2, 1, 3, 2, 3, 5, 2, 3, 2, 2, 2, 3, 5, 3, 
3, 0, 2, 2, 2, 6, 4, 3, 3, 4, 2, 2, 6, 3, 3, 3, 2, 5, 5, 
4, 2, 5, 4, 2, 3, 3, 3, 1, 2, 0, 4, 5, 2, 3, 1, 3, 2, 5, 
11, 3, 7, 1, 4, 4, 6, 3, 2, 1, 1, 3, 3, 2, 1, 3, 4, 2, 2, 
5, 4, 3, 3, 4, 3, 3, 1, 2, 1, 1, 5, 7, 2, 1, 2, 6, 3, 1, 
2, 2, 4, 3, 4, 1, 6, 4, 4, 2, 3, 4, 5, 4, 1, 3, 4, 3, 2, 
2, 2, 2), WT = c(118L, 175L, 135L, 125L, 118L, 183L, 218L, 
192L, 125L, 123L, 140L, 160L, 150L, 130L, 140L, 130L, 150L, 
148L, 134L, 138L, 116L, 145L, 195L, 180L, 137L, 135L, 155L, 
120L, 126L, 191L, 185L, 119L, 129L, 170L, 110L, 155L, 105L, 
115L, 120L, 150L, 135L, 110L, 170L, 145L, 170L, 140L, 240L, 
100L, 92L, 160L, 155L, 132L, 110L, 145L, 155L, 110L, 129L, 
131L, 218L, 115L, 110L, 130L, 97L, 120L, 130L, 150L, 123L, 
145L, 135L, 132L, 205L, 127L, 120L, 145L, 175L, 144L, 123L, 
170L, 134L, 155L, 125L, 140L, 120L, 134L, 150L, 117L, 147L, 
124L, 129L, 170L, 153L, 130L, 145L, 140L, 155L, 116L, 115L, 
175L, 179L, 119L, 153L, 185L, 280L, 140L, 126L, 193L, 140L, 
116L, 140L, 138L, 175L, 155L, 125L, 113L, 110L, 190L, 114L, 
126L, 159L, 170L, 156L, 161L, 150L, 115L, 95L, 235L, 145L, 
123L, 145L, 155L, 115L, 190L, 120L, 110L, 148L, 120L, 132L, 
115L, 125L, 120L, 155L, 170L, 180L, 179L, 137L, 107L, 144L, 
189L, 80L, 142L, 150L, 154L, 90L, 150L, 102L, 110L, 101L, 
109L, 210L, 198L, 124L, 133L, 120L, 165L, 130L, 240L, 125L, 
183L, 130L, 105L, 123L, 180L, 130L, 104L, 158L, 160L, 108L, 
127L, 145L, 127L, 132L, 140L, 178L, 130L, 130L, 265L, 195L, 
125L, 105L, 161L, 135L, 185L, 115L, 140L, 145L, 195L, 138L, 
118L, 129L, 180L), AGLP = c(39L, 39L, 39L, 40L, 39L, 38L, 
38L, 37L, 38L, 38L, 37L, 38L, 38L, 38L, 38L, 38L, 38L, 38L, 
39L, 38L, 39L, 35L, 35L, 38L, 37L, 37L, 37L, 38L, 36L, 36L, 
37L, 37L, 36L, 34L, 36L, 35L, 29L, 36L, 36L, 36L, 35L, 35L, 
36L, 36L, 34L, 35L, 34L, 35L, 33L, 33L, 32L, 33L, 33L, 29L, 
29L, 33L, 32L, 32L, 26L, 32L, 30L, 30L, 31L, 31L, 50L, 53L, 
35L, 46L, 53L, 44L, 42L, 50L, 52L, 46L, 51L, 50L, 33L, 39L, 
53L, 39L, 53L, 50L, 41L, 45L, 56L, 36L, 52L, 52L, 34L, 54L, 
50L, 55L, 53L, 56L, 55L, 43L, 51L, 42L, 50L, 47L, 53L, 55L, 
42L, 25L, 44L, 50L, 55L, 47L, 52L, 50L, 47L, 50L, 36L, 45L, 
40L, 48L, 50L, 43L, 42L, 42L, 52L, 50L, 45L, 51L, 49L, 44L, 
44L, 49L, 48L, 48L, 48L, 29L, 47L, 47L, 45L, 45L, 47L, 29L, 
47L, 39L, 46L, 45L, 46L, 40L, 46L, 46L, 46L, 39L, 45L, 38L, 
45L, 46L, 45L, 45L, 28L, 45L, 45L, 40L, 40L, 33L, 45L, 45L, 
46L, 35L, 44L, 45L, 44L, 44L, 44L, 44L, 33L, 44L, 43L, 43L, 
21L, 39L, 29L, 27L, 27L, 29L, 50L, 49L, 43L, 49L, 47L, 42L, 
50L, 47L, 27L, 31L, 36L, 41L, 41L, 41L, 40L, 41L, 42L, 41L, 
41L, 41L), MST = structure(c(1L, 3L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 5L, 2L, 1L, 1L, 2L, 1L, 1L, 4L, 1L, 2L, 
1L, 2L, 5L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 5L, 1L, 1L, 1L, 
1L, 5L, 3L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 2L, 4L, 5L, 
4L, 1L, 5L, 4L, 4L, 1L, 5L, 3L, 1L, 5L, 1L, 4L, 4L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 4L, 1L, 4L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 4L, 5L, 1L, 1L, 1L, 1L, 3L, 
5L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 5L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 4L, 1L, 
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 5L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 1L, 4L, 1L, 1L, 
4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 4L, 1L, 1L, 1L, 
1L, 3L, 4L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("1", 
"2", "3", "4", "5"), class = "factor")), .Names = c("STR", 
"OBS", "AGMT", "FNDX", "HIGD", "DEG", "CHK", "AGP1", "AGMN", 
"NLV", "LIV", "WT", "AGLP", "MST"), row.names = c(NA, -200L), class = "data.frame") 
+0

我們需要示例數據和一個示例函數調用來進一步幫助。你的「公式」和「數據」是什麼? – Benjamin 2012-04-09 15:02:00

+0

感謝您的編輯。你可以用'dput(bbdm)'來獲得一個我們可以更容易複製的bbdm版本嗎? – 2012-04-09 15:29:25

+0

對不起,但我不明白dput()的輸出,所以我只是把它放在問題後面。告訴我,如果它沒用,或者我犯了一個錯誤。 – TomHall 2012-04-09 15:42:34

回答

0

難道是bbdm[train]它找不到,而不是train本身?你會得到什麼錯誤信息?

您可以使用browser命令在此進行調試。即

gcv<-function(formula,data=NULL,method="rpart",cross=5,times=10,k=7,layer=5,seed=0) 
{ 

    set=data; 
n=nrow(set); 
set.seed(as.vector(Sys.time())); 
bb1=1:n; 
bb2=rep(1:cross,ceiling(n/cross))[1:n]; 
bb2=sample(bb2,n); 
samp=sample(c(1:n),size=n); 
m=ceiling(n/cross); 
smp<-mat.or.vec(cross,m); 
j=rep(0,cross) 
for (i in 1:n) 
{ 
    smp[bb2[i],j[bb2[i]]]=i 
    j[bb2[i]]=j[bb2[i]]+1 
} 
# Here we separate the original set into 5(variable cross)sets, 
    # each time we take one out and treat it as the testing set 

mf <- match.call(expand.dots = FALSE) 
m <- match(c("formula","data"), names(mf), 0L) 
mf <- mf[c(1L, m)] 
mf$drop.unused.levels <- TRUE 
mf[[1L]] <- as.name("model.frame") 
mf <- eval(mf, parent.frame()) 
response<-model.response(mf) 
#code copied from function.lm 

reslvl<-length(levels(response)) 
tra<-mat.or.vec(reslvl,reslvl); 
tes<-mat.or.vec(reslvl,reslvl); 

for (i in 1:cross) 
{ 
    test<-smp[i,]; 
    train<-setdiff(1:200,test); 
    show(train); #THe 'train' set can be shown here. 

    #some "if" and "else"statements are hidden 

    if (method=="logistic")#logistic is running well 
    { 
     bb.log<-step(glm(formula,set,family=binomial),trace=FALSE) 
     tra<-tra+as.vector(t(table(response[train], 
             bin(predict.glm(bb.log,set[train,],type="response"))))) 
     tes<-tes+as.vector(t(table(response[test], 
             bin(predict.glm(bb.log,set[test,],type="response"))))) 
    } 
    else if (method=="clogit")#clogit is meeting a problem. 
    { 
     ##### BROWSER() CALL ########## 
     browser() 
     library("survival") 
     bb.clog<-step(clogit(formula,bbdm[train,]),trace=FALSE) 
     tra<-tra+as.vector(t(table(response[train], 
               bin(predict(bb.clog,set[train,]))))) 
     tes<-tes+as.vector(t(table(response[test], 
               bin(predict(bb.clog,set[test,]))))) 
    } 
} 
tra<-tra/cross; 
tes<-tes/cross; 
trainrate=1-sum(diag(tra))/sum(tra) 
testrate=1-sum(diag(tes))/sum(tes) 
result<-list(Train=tra,TrainRate=trainrate,Test=tes,TestRate=testrate) 
result 
} 

瀏覽器可用於以這樣的調試功能。實質上,當您運行代碼時,您將在調用browser時進入環境。這將允許您探索並查看變量是否是您認爲的那些變量。您可以執行ls()以查看定義了哪些對象,或嘗試查找train或(我的懷疑)bbdm的值以查看它們是否都已正確定義。

相關問題