2016-12-26 28 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 
相关问题