Hi. I have some code which loops through raw GPS data. This initial loop calculates distance, angle, speed etc between successive coordinates as well as type of movement e.g.left, right, forward. I want to construct a second loop that goes through the movements and records 'Changes' as either '0' or '1' depending on whether the movement changed or not. I have put the whole code in for reference but the additional loop begins at the object 'holder.' I want to store movements in holder and then loop through holder to determine 'changes.' At the moment it gives me 'Error in holder[[t - 1]] : attempt to select less than one element.' The moment i make holder [[t]] it works but just gives a list of '0's. I have tried many different things and just cannot get it to work, so any help would be very much appreciated. Again, sorry for the long post.
lst <- list() # temporary list to store the results for (i in seq(1, nrow(R) - 1)){ # loop through each row of the 'R' matrix lat1 <- deg2rad(R[i, 4]) long1 <- deg2rad(R[i, 5]) lat2 <- deg2rad(R[i + 1, 4]) long2 <- deg2rad(R[i + 1, 5]) gcd_vif <- gcd.vif(lat1, long1, lat2, long2) # calc estimated speed by mean of speeds between two GPS records estSpeed <- (R[i, 6] + R[i+1, 6])/2 # calculate acceleration (velocity) accel <- (R[i+1, 6] - R[i, 6]) / GPSSample # calculate absolute heading heading <- absoluteHeading(lat1, long1, lat2, long2) # calculate bearing relative to previous GPS record relAngle <- 0 # if the number of GPS records is less than 3 then no change in track if (i < 1) relAngle = heading # otherwise consider the previous heading in order to calculate the new track else if (i > 0) { relAngle = (previousHeading - heading) } # determine whether movement is occurring and if so what type # if there are insufficient history items then just record movement types discretely if (i < historyLength) movement <- movementType(relAngle, angleThreshold) else if (i > historyLength-1) { # Array to store speeds speedHistory <- array(historyLength) n = historyLength-1 # get the speeds from the previous n (hisoryLength) "Movements" for (j in seq(1, length(historyLength))){ speedHistory [n] = R[i-j, 6] n-1 } if (!bayesFilter(speedHistory, minSpeed, GPS_accy)) movement <- "non-moving" else if(bayesFilter(speedHistory, minSpeed, GPS_accy)) movement <- movementType(relAngle, angleThreshold) } holder <- list(movement) holder [[i]] <- (movement) for (t in length(holder)){ if (holder[[t]] == holder[[t-1]]) changes <- 0 else changes <- 1 } # update previous heading information previousHeading = heading # Store the input data and the results lst[[i]] <- c( latitude_position_1 = lat1, longtude_position_1 = long1, latitude_position_2 = lat2, longtude_position_2 = long2, Distance = gcd_vif, Speed = estSpeed, Acceleration = accel, Absolute_Heading = heading, Relative_Heading = relAngle, Movement = movement, Changes = changes ) } Results <- as.data.frame(do.call(rbind, lst)) # store the input data and the results in a data frame Results -- View this message in context: http://r.789695.n4.nabble.com/for-loop-not-working-tp4713392.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help@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.