我正在寻找一个函数'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是一个函数参数,并且该特定函数使用了以下参数。
感谢
答案 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