我正在尝试复制《统计学习导论与R应用》中6.5.3节实验室的结果。我严格按照实验室中的代码操作:
library("ISLR")library("leaps")set.seed(1)train = sample(c(TRUE, FALSE), nrow(Hitters), rep = TRUE)test = (!train)regfit.best = regsubsets(Salary ~., data = Hitters[train,], nvmax= 19)test.mat = model.matrix(Salary~., data = Hitters[test,]) val.errors = rep(NA, 19)for (i in 1:19){ coefi= coef(regfit.best, id = i) pred=test.mat[,names(coefi)]%*%coefi val.errors[i]=mean((Hitters$Salary[test]-pred)^2) }
当我运行这段代码时,仍然会得到以下错误:
警告信息:在Hitters$Salary[test] - pred : 较长对象的长度不是较短对象长度的倍数错误在mean((Hitters$Salary[test] - pred)^2) : 评估函数'mean'的参数'x'时出错:错误:维度[乘积121]与对象的长度[148]不匹配
并且val.errors是一个包含19个NA的向量。
我对R和验证方法还比较新手,所以我不确定为什么这些维度会不同。
回答:
实际上,这是由于没有从前一小节中继承步骤造成的,这些步骤省略了不完整的条目。