[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