2015-06-10 53 views
1

是否有任何標準函數可應用於單個向量來處理每個步驟的兩個元素?處理向量中的元素對

例如,我們有矢量:

> a <- c(8, 4, 5, 5, 7, 10) 

,我們要減去兩個鄰居元素:

> func(a, function (x1, x2) { x1-x2 }) 

[1] 4 -1 0 -2 -3 
+2

試試'-diff(a)',但有些東西告訴我你想要更一般的東西。 – joran

回答

2

一般來說,如果你要處理成對你可以得到連續矢量元素每對的第一個元素:

(first <- head(a, -1)) 
# [1] 8 4 5 5 7 

,你可以得到的第二個元素在每一對

(second <- tail(a, -1)) 
# [1] 4 5 5 7 10 

然後你可以在連續的元素上執行任何你想要的操作。舉例來說,這裏是你的操作:

first-second 
# [1] 4 -1 0 -2 -3 

這裏的連續元素的產品:

first*second 
# [1] 32 20 25 35 70 

請注意,您的操作其實是很常見所以有專門的功能,採取連續元素的差異, diff

+0

大型載體的性能如何? –

+0

@TarasShchybovyk即使對於大型向量,您也應該能夠快速計算'first'和'second'。所以效率會降低到你對他們所做的事情。象'-'和'*'這樣的快速矢量化操作將會很快,但是慢操作(如涉及循環的操作)會很慢。請注意,'-diff(a)'應該比'head(a,-1) - tail(a,-1)'更快。 – josliber