是否有任何標準函數可應用於單個向量來處理每個步驟的兩個元素?處理向量中的元素對
例如,我們有矢量:
> a <- c(8, 4, 5, 5, 7, 10)
,我們要減去兩個鄰居元素:
> func(a, function (x1, x2) { x1-x2 })
[1] 4 -1 0 -2 -3
是否有任何標準函數可應用於單個向量來處理每個步驟的兩個元素?處理向量中的元素對
例如,我們有矢量:
> a <- c(8, 4, 5, 5, 7, 10)
,我們要減去兩個鄰居元素:
> func(a, function (x1, x2) { x1-x2 })
[1] 4 -1 0 -2 -3
一般來說,如果你要處理成對你可以得到連續矢量元素每對的第一個元素:
(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
。
大型載體的性能如何? –
@TarasShchybovyk即使對於大型向量,您也應該能夠快速計算'first'和'second'。所以效率會降低到你對他們所做的事情。象'-'和'*'這樣的快速矢量化操作將會很快,但是慢操作(如涉及循環的操作)會很慢。請注意,'-diff(a)'應該比'head(a,-1) - tail(a,-1)'更快。 – josliber
試試'-diff(a)',但有些東西告訴我你想要更一般的東西。 – joran