我有一個載體,如c(1, 3, 4, 5, 9, 10, 17, 29, 30)
和我想組,在一個粗糙的矢量形成規則,連續序列導致在一起「相鄰」元素:如何將一個向量分成規則的連續序列組?
L1:1
L2:3,4 ,5
L3:9,10
L4:17
L5:29,30
樸素代碼(的前C程序員):
partition.neighbors <- function(v)
{
result <<- list() #jagged array
currentList <<- v[1] #current series
for(i in 2:length(v))
{
if(v[i] - v [i-1] == 1)
{
currentList <<- c(currentList, v[i])
}
else
{
result <<- c(result, list(currentList))
currentList <<- v[i] #next series
}
}
return(result)
}
現在我明白了
一)R不是C(儘管大括號)
B)全局變量是純粹的邪惡
c)該是實現的結果
的效率極其低下的方式,所以沒有更好的解決方案歡迎。
是的,這是很多更合適的方法:然而,他們的代碼仍然可以通過小心地使用正確的類型,整數和邏輯值的比快兩倍多! :)我不知道'split',謝謝你將我的注意力指向這個有用的功能。 – daroczig 2011-03-07 16:46:26
我應該注意,當使用'as.integer'時應該小心,因爲它會返回截斷值,當使用浮點算術創建數值時,這可能不是您想要的,例如'as.integer(0.3 * 3 + 0.1)'返回'0'。 – Aaron 2011-05-13 16:28:16