R函数中的避免环
我正在编写一个R包,在它的一个函数中使用以下代码 这里我加载数据 数据链接如下所示R函数中的避免环,r,performance,loops,vectorization,R,Performance,Loops,Vectorization,我正在编写一个R包,在它的一个函数中使用以下代码 这里我加载数据 数据链接如下所示 info这里的问题很可能是您正在生长一个对象grid,而不是在循环for循环本身非常有效。参见中的圆圈2。最好的解决方案可能是使它成为一个4列的矩阵,并在开始循环之前调整它的大小后替换为该矩阵。最好在这里有一个可复制的示例。也许你有一些与你的软件包捆绑在一起的示例数据?地狱是一些好东西@BrodieG。谢谢分享!我明白你的意思了@BrodieG,我来看看。我分享了数据和大部分代码@brandon bertels
info这里的问题很可能是您正在生长一个对象grid
,而不是在循环for
循环本身非常有效。参见中的圆圈2。最好的解决方案可能是使它成为一个4列的矩阵,并在开始循环之前调整它的大小后替换为该矩阵。最好在这里有一个可复制的示例。也许你有一些与你的软件包捆绑在一起的示例数据?地狱是一些好东西@BrodieG。谢谢分享!我明白你的意思了@BrodieG,我来看看。我分享了数据和大部分代码@brandon bertelsen
info <- read.table("./Datos/PIBcol_SD.txt",header=TRUE,row.names=1,dec=".")
attach (info)
lpib <- ts (log(PIB) , start= c(1982,1) , frequency = 4)
series <- diff (lpib , lag=4)
trans <- lag (series , k=-1)
linear <- c(1,4)
nonlinear <- 1
linear <- c (0,linear)
nonlinear <- c (0,nonlinear)
linear_list <- lapply (linear, function(i) lag(series, k=-i))
linear_dat <- na.omit(do.call(cbind, linear_list))
colnames(linear_dat) <- paste0 ("lag_",linear)
nonlinear_list <- lapply (nonlinear, function(i) lag(series, k=-i))
nonlinear_dat <- do.call(cbind, nonlinear_list)
colnames(nonlinear_dat) <- paste0 ("nl.lag_",nonlinear)
nonlinear_dat <- window (nonlinear_dat, start=start(linear_dat),end=end(linear_dat))
trans <- window (trans, start=start(linear_dat),end=end(linear_dat))
scale <- sqrt (var(trans))
grid <- list()
for (c1 in seq(min(trans), max(trans), mean(trans)/20)){
for (gamma in seq(1,100,0.5)) {
transition <- (1+exp(-(gamma/scale)*(trans-c1)))^-1
lin_eq <- paste0("lag_0 ~", paste(paste(colnames(linear_dat)[-1]), sep="",collapse='+'))
nonlin_eq <- paste0("transition + ",paste("I(transition*",paste(colnames(nonlinear_dat)[-1],")"), sep="",collapse='+'))
grid.regre <-lm(paste0(lin_eq,"+",nonlin_eq),data=data.frame(linear_dat,nonlinear_dat,trans))
coef <- grid.regre$coefficients
RSS <- sum(grid.regre$residuals^2)
grid[[length(grid)+1]] <- c(RSS,gamma,c1,coef)
}
}
Small_RSS <- which.min(sapply(grid, "[[", 1))
Start_val <- grid[[Small_RSS]]
names(Start_val) <- c("RSS","gamma","c1",c("intercept",colnames(linear_dat)[-1],"nl_intercept",colnames(nonlinear_dat)[-1]))
Start_val