[R] Storing output of loop into list()

Adams, Jean jvadams at usgs.gov
Thu Apr 7 19:09:47 CEST 2016


You don't need a for loop for the first part.  You can do it like this:

Notice that I used unchanging data for the temps vector so that you could
tell us what output you expect to see, in case what I provide is not
adequate.

temps <- c(13.988, 13.932, 14.039, 14.082, 13.998, 13.93, 14.028, 14.015,
  14.06, 14.092, 14.089, 13.971, 14.062, 14.001, 13.959, 14.046,
  14.034, 14.089, 13.991, 13.982, 14.038, 14.001, 13.973, 13.966,
  13.995, 13.934, 14.101, 14.087, 14.064, 14.06, 14.027, 13.996,
  14.037, 14.024, 14.032, 14.052, 13.986, 14.021, 13.988, 13.98,
  13.968, 13.959, 14.055, 13.978, 14.105, 14.005, 13.996, 14.027,
  13.99, 13.966, 14.047, 13.903, 13.953, 14.02, 13.969, 14.051,
  14.027, 14.03, 14.078, 13.988, 14.007, 13.899, 14.023, 13.991,
  13.993, 13.973, 14.035, 14.091, 14.033, 13.943, 14.08, 14, 14.015,
  14.042, 13.993, 14.064, 14.039, 13.939, 13.95, 14.017, 13.984,
  14.075, 14.006, 14.029, 14.004, 13.974, 14.003, 14.073, 13.991,
  13.973, 14.029, 14.02, 14.032, 14.036, 14.021, 13.983, 13.981,
  13.977, 13.94, 14.014)

tempdif9 <- -diff(temps, lag=9)
L <- length(tempdif9)
sel <- tempdif9[-L] >= 0.1 & tempdif9[-1] > -0.05
ttind <- cbind(tempdif9, index=1:L)[sel, ]
ttind

     tempdif9 index
[1,]    0.101    10
[2,]    0.100    17
[3,]    0.101    28
[4,]    0.152    43

I'm not sure what you are trying to achieve with the second part.  I
suspect that what you really wanted is to see the temperatures that
contributed to the output in ttind.  If that's the case, then perhaps this
will help.

contrib <- t(sapply(ttind[, "index"], function(i) temps[i + 0:8]))
contrib

       [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]   [,9]
[1,] 14.092 14.089 13.971 14.062 14.001 13.959 14.046 14.034 14.089
[2,] 14.034 14.089 13.991 13.982 14.038 14.001 13.973 13.966 13.995
[3,] 14.087 14.064 14.060 14.027 13.996 14.037 14.024 14.032 14.052
[4,] 14.055 13.978 14.105 14.005 13.996 14.027 13.990 13.966 14.047

Jean


On Thu, Apr 7, 2016 at 11:09 AM, <maettuw at students.unibe.ch> wrote:

> Hello. I am trying to store the output from a loop into a matrix. Failed
> so far, thanks for the help.
>
> What I want to store into a new matrix: (just run the code once):
>
> temps<-rnorm(400,14,0.05)
> ttind<-NULL
> for(ti in 1:(length(temps)-9)) {
>   if(temps[ti]-temps[ti+9] >= 0.1 && max(temps[ti]-temps[ti+1:9]) > -0.05)
>     ttind<-c(ttind,ti)
> }
> for(ti in 1:length(ttind)) {
>
>  print(round(temps[ttind[ti]:(ttind[ti]+9)],3))
>
>   }
>
>
>
>
>
>
>
> My (failed) soultion attempt:
>
> temps<-rnorm(400,14,0.05)
> ttind<-NULL
> for(ti in 1:(length(temps)-9)) {
>   if(temps[ti]-temps[ti+9] >= 0.1 && max(temps[ti]-temps[ti+1:9]) > -0.05)
>     ttind<-c(ttind,ti)
> }
>
> outputList = list()
> counter = 1
>
> for(ti in 1:length(ttind)) {
>
>   outputList[i] <-  print(round(temps[ttind[ti]:(ttind[ti]+9)],3))
> counter= counter+1
>   }
>
> print(outputList)
>
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list