0

在我的自定义功能中,我遇到了一个奇怪的问题。

我正在编写一个函数来使用逻辑和 clogit(生存)回归进行交叉验证。因此我需要生成一个训练集和测试集。我已经标记了要执行的部分。

我需要比较经典逻辑回归和条件逻辑回归。所以我使用“if”语句来区分这两个函数。

这就是问题所在。似乎glm函数可以找到训练向量并且做得很好,但是clogit找不到它!即使训练向量输出正确。

当我从我的函数 gcv 中测试每一行时,clogit 再次工作。有人能告诉我为什么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

您需要 traceback() 信息吗?

数据集是http://www.umass.edu/statdata/statdata/stat-logistic.html中的bbdm13。原始数据中有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")
4

1 回答 1

0

难道是bbdm[train]它找不到,而不是train它自己?你得到什么错误信息?

您可以在browser此处使用命令进行调试。IE

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被调用的那一刻的环境。这将允许您探索并查看变量是否是您认为的那样。您可以执行 anls()查看定义了哪些对象,或者尝试查找trainor 的值(我的怀疑)bbdm以查看它们是否都已正确定义。

于 2012-04-09T14:50:06.213 回答