【问题标题】:In R, pass a vector of functions to a another function and refer to each passed function by name在 R 中,将函数向量传递给另一个函数,并按名称引用每个传递的函数
【发布时间】:2017-03-23 13:34:37
【问题描述】:

我想将一组函数(列表或向量)发送到另一个函数,然后在另一个函数中,我想获取我发送的那些单独函数的名称。我也想使用这些功能,但似乎工作正常。

例如:

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()) 的理解,但我想知道是否还有另一种我忽略的方法。

【问题讨论】:

  • 挑战是在不评估其元素的情况下对funclist 向量进行子集化。可能有一些哄骗的方法。

标签: r function substitution


【解决方案1】:
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"

【讨论】:

  • 这会评估函数,但不提供所需的输出,即"funcA"。如果不可能,请提供有关原因的指导。
  • @PierreLafortune 这就是你想要的吗?很抱歉我没有早点检查您想要的输出
  • OP 询问为什么他们在函数中子集funclist[1] 时遇到问题。
  • 我猜OP的问题已经得到解答。他希望将作为参数传递的函数名保存为字符串。如果没有,请分享您想要的函数调用和输出示例。
  • 这听起来正是我所需要的。从未想过使用 as.character(substitute())。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 2019-07-25
  • 2014-04-02
  • 2021-08-02
相关资源
最近更新 更多