我有一个奇怪的问题,我似乎无法解决.
我已经尝试编写一个函数,对R中逐步过程选择的模型执行K折交叉验证.(我知道逐步过程的问题,它纯粹用于比较目的):)
现在的问题是,如果我定义函数参数(linmod,k,direction)并运行函数的内容,它可以完美地工作.但是,如果我将它作为一个函数运行,我会收到一条错误,指出无法找到datas.train对象.
我已经尝试使用debug()逐步执行该函数,并且该对象显然存在,但R表示当我实际运行该函数时它不会.如果我只是使用lm()拟合模型,它工作正常,所以我认为这是循环中的step函数的问题,而在函数内部.(尝试注释掉步骤命令,并将预测设置为普通线性模型的预测.)
#CREATE A LINEAR MODEL TO TEST FUNCTION
lm.cars <- lm(mpg~.,data=mtcars,x=TRUE,y=TRUE)
#THE FUNCTION
cv.step <- function(linmod,k=10,direction="both"){
response <- linmod$y
dmatrix <- linmod$x
n <- length(response)
datas <- linmod$model
form <- formula(linmod$call)
# generate indices for cross validation
rar <- n/k
xval.idx <- list()
s <- sample(1:n, n) # permutation of 1:n
for (i in 1:k) {
xval.idx[[i]] <- s[(ceiling(rar*(i-1))+1):(ceiling(rar*i))]
}
#error calculation
errors <- R2 <- 0
for (j in 1:k){
datas.test <- datas[xval.idx[[j]],]
datas.train <- datas[-xval.idx[[j]],] …Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数,我想将一些参数传递给crrstep-function('crrstep'包),但我遇到了一个问题:当我在crrstep中输入时,我的函数中的参数'event'无法识别.我想crrstep看起来与我想要的环境不同,但即使经过几个小时的网络搜索解决方案,我似乎也无法弄清楚如何解决这个问题(我在编程方面经验不足......) .任何帮助将不胜感激!
这是一些模拟数据(来自crrstep文档的调整示例)和我的代码示例:
n <- 500
ftime <- rexp(n)
fstatus <- sample(0:2,n,replace=TRUE)
testdata <- matrix(runif(8*n),nrow=n)
testdata <- cbind(ftime,fstatus,testdata)
dimnames(testdata)[[2]] <- c('ftime','fstatus','x1','x2','x3','x4','x5','x6','x7','x8')
testdata <- as.data.frame(testdata)
formula1 <- ftime ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
rm(fstatus,ftime,n)
test.fun <- function(x,data,event){
require(crrstep)
select.mod<- crrstep(formula=x,,etype=event, failcode=1, cencode=0,data=data,
direction = "backward", criterion = "AIC", crr.object = TRUE,
trace = FALSE)
#Rest of function omitted for now
print(select.mod)
}
#Test
test.fun(x=formula1,data=testdata,event=fstatus)
#I get: Error in …Run Code Online (Sandbox Code Playgroud)