Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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函数中的避免环_R_Performance_Loops_Vectorization - Fatal编程技术网

R函数中的避免环

R函数中的避免环,r,performance,loops,vectorization,R,Performance,Loops,Vectorization,我正在编写一个R包,在它的一个函数中使用以下代码 这里我加载数据 数据链接如下所示 info这里的问题很可能是您正在生长一个对象grid,而不是在循环for循环本身非常有效。参见中的圆圈2。最好的解决方案可能是使它成为一个4列的矩阵,并在开始循环之前调整它的大小后替换为该矩阵。最好在这里有一个可复制的示例。也许你有一些与你的软件包捆绑在一起的示例数据?地狱是一些好东西@BrodieG。谢谢分享!我明白你的意思了@BrodieG,我来看看。我分享了数据和大部分代码@brandon bertels

我正在编写一个R包,在它的一个函数中使用以下代码

这里我加载数据 数据链接如下所示


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