2013-09-29 91 views
2

假設我有一個外部函數,它具有一個數字參數和一個函數本身(內部函數)的參數。我如何將外部函數的數值參數的值作爲參數傳遞給內部函數?考慮這個玩具的例子:將函數參數傳遞給函數本身的其他參數

innerfun <- function(M){ 
1:M 
} 

outerfun <- function(x, fun){ 
x * fun 
} 

outerfun(x = 3, fun = innerfun(M = 3)) ## works 
outerfun(x = 3, fun = innerfun(M = x)) ## error because innerfun can't find 'x' 
outerfun(x = 3, fun = innerfun(M = get("x"))) ## doesn't work either... 

所以我想要做的就是在那一刻outerfun的參數進行評估,以調用innerfun,使用這些outerfun論點中調用innerfun。任何想法或建議?

回答

4

我會做這樣的事情:

outerfun <- function(x, fun,...){ 
    x * fun(x,...) 
} 
innerfun <- function(M){ 
    seq_len(M) ## safer than 1:M 
} 
outerfun(x=3, innerfun) 
[1] 3 6 9 

注意,如果內部函數有多個參數,它仍然有效:

innerfun2 <- function(M,Z){ 
    seq(M+Z) 
} 
outerfun(x=3, innerfun2,Z=3) 
[1] 3 6 9 12 15 18 
+0

謝謝,這可能是最簡單的解決方案。我沒有想到通過傳遞innerfun作爲函數調用而沒有參數來利用R的懶惰評估。一旦innerfun在outerfun體內進行評估(而不是在outerfun的初始化過程中),則更容易傳遞參數。 –

+1

@WolfgangPößnecker與懶惰評價無關 – hadley

0

添加一個 「全局」 變量:

param = 3; 
outerfun(x = param, fun = innerfun(M = param))