2016-11-09 59 views
2

我想将一组函数(列表或向量)发送给另一个函数,然后在其他函数内发送喜欢获取我发送的那些个人功能的名称。我也想使用这些功能,但似乎工作正常。在R中,将函数向量传递给另一个函数,并按名称引用每个传递的函数

例如:

funcA <- function(x,y){z=x+y} 
funcB <- function(x,y){z=x-y} 

myfunc <- function(x,y,funclist=c(funcA, funcB)){ 
func1 <- deparse(substitute(funclist[1])) 
} 

我想FUNC1什么等于就是 “FuncA的”,但在这个例子中等于 “funclist [1]”。如果我更换一个单一功能的名称列表,如

myfunc <- function(x,y,funclist=funcA){ 
func1 <- deparse(substitute(funclist)) 
} 

然后我得到FUNC1等于“FuncA的”。我认为我的缺点在于对deparse(substitute())的理解,但我想知道是否有另一种我忽略的方法。

+0

挑战是在不评估其元素的情况下子集“funclist”向量。可能有一些方式与cajoling。 –

回答

2
funcA <- function(x,y){z=x+y} 
funcB <- function(x,y){z=x-y} 

myfunc <- function(x,y,funclist=c(funcA, funcB)){ 
    func.vec <- as.character(substitute(funclist)) 
    func1 <- func.vec[2] 
    print(func1) 
    func2 <- func.vec[3] 
    print(func2) 
} 

myfunc(1,2, c(funcA,funcB)) 
[1] "funcA" 
[1] "funcB" 
+0

这将评估函数,但不提供“funcA”所需的输出。如果这是不可能的,指导为什么它不是。 –

+0

@PierreLafortune这是你想要的吗?我很抱歉,我没有早先检查你想要的输出 –

+0

OP在问函数中为什么会遇到'funclist [1]'子集的问题。 –

相关问题