R语言按名称character自动执行一系列函数

xiaoxiao2021-02-28  82

想到一个很诡异的问题,R语言里能不能自动逐个调用函数?也就是说,假如我有一系列函数,能不能按名字调用它们,自动执行?

类比于,你有系列叫做a,b,c…的函数,目前的调用方式是,a(), b(), c()… 有没有一种办法,可以自动化地执行一下这一系列函数?

我想到这个问题的初衷是,在ChAMP包里,有一系列的Filtering过程,filtering Beads, P value, SNP 等等… 目前的写法是:

if (filteringBeads == TRUE) {…} if (filteringdetP == TRUE) {…} if (filteringSNP == TRUE) {…}

个人觉得很麻烦,而且不太美观,所以在想有没有其他更好的办法一次性解决这个问题,结果解决方案很简单:

# 定义A函数 > A <- function() "Hello" # 定义B函数 > B <- function() "World" # 将两个函数包含如一个list中 > FunctionList <- list("a"=A,"b"=B) # 然后定义一个包含"a","b"名称的vector,用sapply逐个调用 > sapply(c("a","b"),function(x) FunctionList[[x]]()) a b "Hello" "World"

另外,还可以设定参数:

> A <- function(i) paste("Hello",i) > B <- function(i) paste("World",i) > FunctionList <- list("a" = A, "b" = B) > lapply(FunctionList,function(x) x("tianyuan")) $a [1] "Hello tianyuan" $b [1] "World tianyuan" >

通过这种办法,你就可以一次性定义一对函数,然后用一个character vector去做匹配,一个sapply就执行完了。

转载请注明原文地址: https://www.6miu.com/read-24816.html

最新回复(0)