Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在搭接中使用seq__R_Lapply - Fatal编程技术网

R 在搭接中使用seq_

R 在搭接中使用seq_,r,lapply,R,Lapply,折叠交叉验证法,用于比较使用正向选择拟合的19个模型的残差。我在最后一步被卡住了。 代码如下所示: library(ISLR) summary(Hitters) # Use the dataset of Hitters Hitters = na.omit(Hitters) library(leaps) set.seed(11) folds = sample(rep(1:10,length=nrow(Hitters))) # used for cross validation later

折叠交叉验证法,用于比较使用正向选择拟合的19个模型的残差。我在最后一步被卡住了。 代码如下所示:

library(ISLR)
summary(Hitters)  # Use the dataset of Hitters
Hitters = na.omit(Hitters)

library(leaps)

set.seed(11)
folds = sample(rep(1:10,length=nrow(Hitters)))  # used for cross validation later
table(folds)
cv.errors = matrix(NA,10,19)   
# store the errors from 10 validations, each contains an error for a model

# write a prediction function
predict.regsubsets = function(object,newdata,id,...){
  form = as.formula(object$call[[2]])   # extract the formula
  mat = model.matrix(form,newdata)      # extract the exploratory data
  coefi = coef(object,id=id)            # coefficients for the ith model
  return(mat[,names(coefi)]%*%coefi)    # manually get the predicted value
}
# write a function to extract the Mean of squared root of residuals
error = function(object,newdata,origin,num,...){
  pred = lapply(seq_along(1:num),function(x){predict.regsubsets(object,newdata,id=x)})
  sapply(pred,function(x){mean((x-origin)^2)})
}

# this gives error: $ operator is invalid for atomic vectors 
lapply(seq_along(1:10),function(X){
  best.fit = regsubsets(Salary~.,data=Hitters[folds!=X,],nvmax=19,method="forward")
  cv.errors[X,]=error(best.fit,newdata=Hitters[folds==X,],origin=Hitters$Salary[folds==X],num=19)
})

# this works well, except for being slow...
for(X in 1:10){
  best.fit = regsubsets(Salary~.,data=Hitters[folds!=X,],nvmax=19,method="forward")
  cv.errors[X,]=error(best.fit,newdata=Hitters[folds==X,],origin=Hitters$Salary[folds==X],num=19)
}

谢谢

这可能是一个范围界定问题。未尝试,但请尝试以下操作:

lapply(1:10,function(X){
  best.fit = regsubsets(Salary~.,data=Hitters[folds!=X,],nvmax=19,method="forward")
  cv.errors[X,] <- error(best.fit,newdata=Hitters[folds==X,],origin=Hitters$Salary[folds==X],num=19)
})
lappy(1:10,函数(X){
best.fit=regsubsets(工资~,数据=Hitters[folds!=X,],nvmax=19,method=“forward”)

简历错误[X],不确定这是否能解决你的问题,但是:你真的需要在这里使用
seq\u吗?只要
1:10
就足够了。
seq\u-along(1:10)的值是1:10,所以SEQYALAN是多余的。考虑使用包<代码> CVoToS/<代码>而不是滚动自己。这里有什么问题?还不清楚。