定义R函数接收函数参数作为函数调用而不对其进行评估

时间:2016-12-26 18:19:02

标签: r

我正在寻找一个函数'f',它以下列方式接收函数作为参数:

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':

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

并拨打'f':

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

但这是不太可读的,因为通过查看函数调用无法判断f1 / 2是一个函数参数,并且该特定函数使用了以下参数。

感谢

2 个答案:

答案 0 :(得分: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)计算的函数。

答案 1 :(得分: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