R中的for循环并应用替代

用户21359

我正在尝试使用验证方法来确定模型对多个不同训练样本的测试误差。

library(ISLR)
set.seed(1)
train1 <- sample(10000,5000)
train2 <- sample(10000,5000)
train3 <- sample(10000,5000)
trains <- c('train1','train2','train3')
verror = rep(0,3)
for (i in trains){
  glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i)
  logitpred <- predict(glm.fit,Default[-i,],type='response')
  classifier <- rep('No',length(logitpred))
  classifier[logitpred > 0.5] <- 'Yes'
  verror[i] <- 1-mean(Default[-i,]$default==classifier)
}

我的 'for' 循环出现“model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别”错误,但我不知道为什么。另外,是否有一种简单的方法可以使用应用函数来实现这一点?

亨利

问题是i哪个是字符串而不是向量或数字

尝试代替类似的东西

library(ISLR)
set.seed(1)
train1 <- sample(10000,5000)
train2 <- sample(10000,5000)
train3 <- sample(10000,5000)
trains <- data.frame(train1,train2,train3)                           ## changed
verror = numeric()                                                   ## changed
for (i in trains){
  glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i)
  logitpred <- predict(glm.fit,Default[-i,],type='response')
  classifier <- rep('No',length(logitpred))
  classifier[logitpred > 0.5] <- 'Yes'
  verror <- c(verror, 1-mean(Default[-i,]$default==classifier))      ## changed
}

或使用 sapply

verrorcalc <- function(i){
  glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i)
  logitpred <- predict(glm.fit,Default[-i,],type='response')
  classifier <- rep('No',length(logitpred))
  classifier[logitpred > 0.5] <- 'Yes'
  1-mean(Default[-i,]$default==classifier)
}
verror_alt <- sapply(trains, verrorcalc) 

给予

> verror 
[1] 0.0286 0.0236 0.0280
> verror_alt
train1 train2 train3 
0.0286 0.0236 0.0280 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章