R语言中将函数名作为循环变量批量调用的实现方法咨询
R语言批量调用同名前缀函数的解决方法
要实现根据字符串格式的函数名调用对应已定义函数的需求,需使用get()函数从运行环境中提取匹配名称的函数对象,你原本使用的as.function()仅支持将表达式转换为新的自定义函数,无法实现该需求。
修正后的可运行示例代码
你提供的示例中dbinom还需要补充size(试验次数)和prob(单次试验成功概率)两个必填参数,修正后代码如下:
xx = -5:5 for (i in c("norm", "pois", "binom")) { # 获取对应分布的密度函数 fun <- get(paste0("d", i)) if (i == "binom") { # 补全dbinom的必填参数 plot(xx, fun(xx, size = 10, prob = 0.5), main = paste0("PDF: ", i)) } else { plot(xx, fun(xx), main = paste0("PDF: ", i)) } }
fun1、fun2...格式函数的批量调用方案
针对你最初提到的序号命名的函数场景,直接按以下写法实现循环调用即可:
# N为你的函数总数量 N <- 5 for (i in 1:N) { fun <- get(paste0("fun", i)) # 按你的实际需求传入函数参数 fun(参数1, 参数2) }
可选优化写法
- 如果需要批量收集所有函数的运行结果,可以用
lapply替代for循环,代码更简洁:
N <- 5 # 所有函数的运行结果会按顺序存储在res_list列表中 res_list <- lapply(1:N, function(i) { get(paste0("fun", i))(参数1, 参数2) })
注意:如果你的函数没有定义在全局环境中,可给
get()添加envir = 目标环境对象参数,指定函数的查找范围。
内容的提问来源于stack exchange,提问作者IVIM
相关产品推荐
相关产品推荐

