2015-06-22 78 views
0

組給定一個排序向量xR:遞歸函數給連續數

x <- c(1,2,4,6,7,10,11,12,15) 

我試圖寫一個小功能,將爲了產生一個類似大小的矢量y給予最後的連續整數連續編號。在我的情況下,它是(定義組2,4,7,12和15):

> y 
[1] 2 2 4 7 7 12 12 12 15 

我嘗試這樣做這個遞歸想法(分別爲x是矢量,且i的索引,將在大多數由1開始例:如果下一個索引的內容比目前我較大的一個,然後調用該函數以i + 1;否則返回的內容):

fun <- function(x,i){ 
    ifelse(x[i]+1 == x[i+1], 
     fun(x,i+1), 
     return(x[i])) 
} 

但是:

> sapply(x,fun,1) 
[1] NA NA NA NA NA NA NA NA NA 

如何讓這個工作。

+1

不是一個騙局,但非常密切相關:http://stackoverflow.com/q/8466807/903061 – Gregor

回答

3

如果您確實希望跨所有i的值應用x的所有值,則您的寶寶呼叫應用fun。爲了讓sapply做什麼,我想你想做的事,你可以做到以下幾點:

sapply(X = 1:length(x), FUN = fun, x = x) 

[1] 2 2 4 7 7 12 12 12 NA 

雖然它返回NA作爲最後一個值,而不是15.這是因爲我不認爲你的函數是設置爲處理矢量的最後一個值(沒有x [10],所以它返回NA)。你可以編輯你的函數來很容易地處理這個問題。

2

也許這會有所幫助:

find_non_consec <- function(x){ c(x[which(as.logical(diff(x)-1))],x[length(x)]) } 
x <- c(1,2,4,6,7,10,11,12,15) 
res <- find_non_consec(x) 

結果是:

> res 
[1] 2 4 7 12 15 

此功能標識了該系列不再是連續的數字。