2016-12-26 51 views
0

我期待以限定接收的函數,如以下面的方式自變量的函數「F」:限定一個R函數接收功能參數作爲一個函數調用,而不計算它

f <- function(c,z(...)) 
{ 
    print(c) 
    z(...) 
} 

,使得如果我定義:

f1 <- function(a) 
{ 
    print(a) 
} 
f2 <- function(a,b) 
{ 
    print(a) 
    print(b) 
} 

我可以撥打下列方式 'F':

f(1,f1(2)) 
1 
2 

f(1,f2(2,3)) 
1 
2 
3 

我知道,我「M能定義‘F’是這樣的:

f <- function(c,z,...) 
{ 
    print(c) 
    z(...) 
} 

並調用‘F’:

f(1,f1,2) 
f(1,f2,1,2) 

但這是不太可讀作爲一個不能由查找在函數調用告訴F1/2是一個函數參數,並且該特定函數使用以下參數。

感謝

回答

0

這是你應該做的:

f = function(x,y){ 
    print(x) 
    y 
} 

f1 = function(x,y){ 
    print(x) 
    print(y) 
} 

注意,第一個函數(f)接受第二個參數,它不評估。

在這種情況下,你可以調用的功能,如你想:

> f(1,f1(2,3)) 
[1] 1 
[1] 2 
[1] 3 

或者

> f(4,f1)(5,6) 
[1] 4 
[1] 5 
[1] 6 

在最後這種情況下,f(4,f1)返回稍後與評價功能(5,6) 。

+0

感謝,這個地址我的要求。根據第一次調用:f(1,f1(2,3)) - 是否只有在內部函數參數在函數內部使用而不是在函數開始時才引發內部函數參數?關於第二次調用f(4,f1)(5,6) - 在應用函數內部不起作用;錯誤消息:「在FUN(newX [,i],...)中的錯誤:嘗試應用非功能」在這裏是否有修復? – kamashay

0
f <- function(c,d) 
{ 
    print(c) 
    d 
} 

f1 <- function(a) 
{ 
    print(a) 
} 
f2 <- function(a,b) 
{ 
    print(a) 
    print(b) 
} 

測試:

> f(1,f2(2,3)) 
[1] 1 
[1] 2 
[1] 3 

> f(1,f1(2)) 
[1] 1 
[1] 2 
相關問題