2016-12-26 9 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 

私はそれを認識していF「を定義することができM 『』は、この方法:

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

と呼んで 『F』:

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

が、1つの関数呼び出しに見ることによって言うことができないので、これは読みにくくであるF1/2関数の引数であり、次の引数がその特定の関数によって使用されます。これは、あなたが何をすべきかである

おかげ

答えて

0

:最初の関数(f)が第2のパラメータを取り、それが評価されていないことを

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

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

注意。

あなたが望んでいたようにあなたは、関数を呼び出すことができます。この場合

:後で(5,6)で評価された関数を返しf(4,f1)この最後の場合、

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

それとも

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

を。

+0

おかげで、これは私の要件に対処します。 f(1、f1(2,3)) - 内部関数の引数は、関数の内部で使用され、関数の先頭では使用されない場合にのみ生成されるという一般的な意味ですか? 2番目の呼び出し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 
関連する問題