2015-04-02 74 views
2

哇,我完全失明瞭...我讀了apply,lapply等文檔,但是我找不到任何東西。對一個向量的兩個元素應用一個函數

比方說,我有一個載體

a = c(1,4,5,23,6,3,121,412,23) 

我想一個函數適用於C(1,4),C(4,5),C(5,23),等。因此,產生的向量應該是長度

length(a)-1 

我假設,這很簡單。甚至,我想我已經做到了。但謝謝你的幫助。

我想要應用的函數基本上是斜率或導數。

感謝的答案我現在有:

slope = function(p){ 
    return (p[2] - p[1]) 
} 
foo = rollapply(a, 2, slope) 
+3

'動物園:: rollapply' – Khashaa 2015-04-02 14:45:03

+1

請指定哪個功能。有滾動總和,平均值,差異的專門和有效的解決方案... – Roland 2015-04-02 14:45:55

+0

感謝,請參閱編輯。 – agoldev 2015-04-02 14:57:21

回答

6

從動物園封裝的rollapply功能似乎是你想要的

> library(zoo) 
> a 
[1] 1 4 5 23 6 3 121 412 23 
> rollapply(a, 2, sum) 
[1] 5 9 28 29 9 124 533 435 

注意,有自定義rollxxx型功能的具體操作,以便更詳細可以提供更優化的方案。

編輯:看到你的編輯後,很明顯,你想要的只是diff

> diff(a) 
[1] 3 1 18 -17 -3 118 291 -389 
+0

還要感謝diff()函數。但在其他地方,我需要rollapply()解決方案。感謝您的幫助。 – agoldev 2015-04-02 15:01:24

2

比方說,你要總結的兩個元素(1+4然後4+5,等等)。您可以使用mapply

mapply(sum, a[-1], head(a,-1)) 
#[1] 5 9 28 29 9 124 533 435 
0

您可以使用apply函數,這通常會讓我們的生活更輕鬆。考慮一個隨機函數(我們稱之爲富 - 我只用基礎-R):

a = c(1,4,5,23,6,3,121,412,23) 
new <- as.data.frame(matrix(a, ncol=2, byrow=TRUE)) 
mapply(foo, new[, 1], new[, 2]) 

,或者如果矢量操作是由特定功能的支持:

foo(new[, 1], new[, 2]) 
相關問題