我有一个向量,比如 c(1, 3, 4, 5, 9, 10, 17, 29, 30)
,我想将形成连续序列的“相邻”元素分组在一起,也就是增加1,在不规则向量中,结果为:
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)
}
现在我明白了:
a)虽然花括号相似,但是 R 不同于 C;
b)全局变量是纯恶魔;
c)那是一种可怕的低效方法来实现结果。
因此,欢迎任何更好的解决方案。
split
,感谢您指出这个有用的函数。 - daroczigas.integer
时要小心,因为它返回截断的值,当数字是通过浮点运算创建时,这可能不是您想要的结果。例如,as.integer(0.3*3+0.1)
返回0
。 - Aaron left Stack Overflow