2012-07-25 23 views
1

我想重複應用一個函數,該函數將兩個參數應用於列表,使用第一個調用的結果以及第二個調用的第三個參數等等,以及這樣。使用先前調用的結果反覆重新應用2參數函數

例如如果列表有4個元素,並給定函數f,我希望結果爲f(f(f(1,2),3),4)。這樣的功能是否存在?

一個例子是有一個數據框的列表,它應該被全部合併在一個特定的列上。

+3

也許'Reduce'可以提供幫助。 – johannes 2012-07-25 08:01:14

+1

完美,謝謝! – Cookie 2012-07-25 08:02:40

+1

雖然 – Cookie 2012-07-25 08:07:39

回答

4

遞歸調用函數的一種方法是使用Reduce。從?Reduce

「減少」使用二進制函數來依次結合在給定矢量的 元件和可能的給定的初始值。

你可以從像這樣的列表合併幾個data.frame:

# some dummy data 
a <- list(data.frame(a=1:10, b=rnorm(10)), data.frame(a=1:10, b=rnorm(10)), data.frame(a=1:10, b=rnorm(10))) 

Reduce(function(u, v) cbind(u, v$b) , a) 
    a   b  v$b   v$b 
1 1 -1.2968741 -0.4186869 0.29888504 
2 2 -0.2680551 0.3315939 2.05348116 
3 3 -0.5188585 0.5125005 1.95103927 
4 4 -0.7447659 -1.2982199 0.80582874 
5 5 0.2391337 -0.6818633 -0.75994882 
6 6 -0.6391927 0.3584701 1.50356731 
7 7 1.0117809 -0.1060888 0.07402643 
8 8 -1.8877719 -0.4380313 0.49141877 
9 9 -0.7392668 1.1527095 1.40168828 
10 10 -1.0318087 0.1889492 1.39867700 
+0

'cbind'實際上可以很好地運行在'do.call'上,但我更想的是merge,但reduce是我想要的, – Cookie 2012-07-25 08:47:59

相關問題