假设我有两个函数,其名称包含在向量中。我想测试每个功能是否有效。
我的方法,我很容易承认可能是错误的,就是遍历向量然后将func1 <- function(){
message("func1 works")
}
func2 <- function(){
message("func2 works")
}
fv <- c("func1","func2")
for(i in seq_along(fv)){
fv_func <- paste0(fv[i],"()")
print(fv_func)
}
[1] "func1()"
[1] "func2()"
粘贴到函数名称。但后来我意识到我不知道如何评估当前存储为字符串的函数调用。这是一个代表:
func1()
所以在这个上下文中我问的是如何评估func2()
和{{1}},尽管最终目标是评估名称存储在向量中的函数 - 这意味着我可以更好地解决问题
答案 0 :(得分:2)
如果您将函数的名称作为字符串,则可以get()
:
fv <- c("func1","func2")
for(i in seq_along(fv)){
fv_func <- get(fv[i])
# Can just call normally, no need to paste () on
fv_func()
}
答案 1 :(得分:2)
尝试其中任何一种:
out <- lapply(fv, do.call, list())
out <- lapply(fv, function(f) match.fun(f)())
答案 2 :(得分:1)
如果我们使用vectorised for
,我们可以在没有eval(parse)
循环的一行中执行此操作:
eval(parse(text = paste0(fv,'()')))