繁体   English   中英

在R中循环并应用替代

[英]For loop in R and apply alternative

我正在尝试使用一种验证方法来确定几个不同训练样本的模型的测试错误。

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,对比)中的错误:变量1没有级别”错误,但我不知道为什么。 另外,有没有一种简单的方法可以通过Apply函数来实现呢?

问题是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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM