我有一個循環,我想執行,取決於代碼中前一個循環的輸出。這是代碼;循環將不會在R執行
holder <- list()
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 [[i]] <- (movement)
for (t in seq(1, length(holder))){
if (t == t-1)
changes <- 0
else if (t != t-1)
changes <- 1
}
你看不到循環的開始,但它會產生一個稱爲'移動'的數據列。
我試圖暫時將「移動」存儲在對象'持有者'中。然後我想要的是循環底部的「持有者」,並將標籤更改爲另一列中的0或1。基本上,如果下一個「移動」不等於先前的記錄,那麼改變爲0等等。我認爲問題可能與對象「持有者」有關?
目前我得到它的循環,但它只打印出一列'1'。
任何幫助非常感謝!謝謝。
目前得到以下的輸出:
Movement Changes
left 1
right 1
forward 1
non-moving 1
non-moving 1
認爲問題出在移動存儲列表?對不起,如果我知道問題出在哪裏,我會更具體。真的很新鮮!
我最終得到一個數據框,其中包含列標題「Distance」「Speed」「Heading」「Movement」和「Changes」。它的循環很好,但由於某種原因,在上面的1列中更改了reults。下面是否有一個明顯的錯誤?:
holder[[i]] <- (movement)
for (t in seq(1, length(holder))){
if (t == t-1)
changes <- 0
else if (t != t-1)
changes <- 1
我也試過這個,但後來它根本沒有循環。
holder[[i]] <- (movement)
for (t in seq(1, length(holder))){
if (holder[t] == holder[t-1])
changes <- 0
else if (holder[t] != holder[t-1])
changes <- 1
我目前正在此錯誤:錯誤在保持器[[噸 - 1]]:嘗試多於一個的元件選擇以下
爲以下代碼:
holder <- list(movement)
for (t in length(holder)){
if (holder[[t]] == holder[[t-1]])
changes <- 0
else changes <- 1
是不是你的問題解決[這裏](http://stackoverflow.com/questions/32903733/for-loop-where-criteria-is-last-data-record-in-r)? – Cath
嗨。是的,最初的問題解決了。我已經嘗試過並在代碼的主體中嘗試過,並且由於某種原因它只是打印出一系列的1?我認爲這可能是因爲我將以前的數據存儲在列表中,但無法確定。 – PharmR
你能分享一段你的數據嗎?我們不知道你正在處理的對象的結構。也可能使用什麼特定的庫 – erasmortg