I gibi c(1, 3, 4, 5, 9, 10, 17, 29, 30)
ve grup için elde edilen düzensiz bir vektörde düzenli, birbirini takip eden bir dizi oluşturmak birlikte 'komşu' elemanları istiyoruz, bir vektör var 3,4 5
L3: 9,10
L4: 17
L5: (ex-Cı programcı) 29,30Bir vektör, düzenli, ardışık sekansların gruplarına nasıl bölümlenir?</p> <p>L1: 1 <br> L2:
Naif kodu:
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)
}
Şimdi
a) R sonucunu
ulaşmada bir korkunç verimsiz yoludur süslü parantez rağmen C()
b) küresel değişkenler saf kötülük
c vardır) olmadığını biliyoruz, bu yüzden daha iyi çözümleridir Hoşgeldiniz.
Evet, bu çok daha lezzetli bir yoldur! :) 'split' hakkında bilmiyordum, dikkatimi bu yararlı işleve işaret ettiğin için teşekkürler. – daroczig
"As.integer" kullanırken, kesikli değeri döndürdüğünde dikkatli olmanız gerekir, sayısal sayı kayan nokta aritmetiği ile oluşturulduğunda istediğiniz gibi olmayabilir, örneğin, "as.integer (0.3 *) 3 + 0.1) '' 0' döndürür. – Aaron