如何在R API函数调用中将参数名设为变量?
动态指定R函数的参数名
嘿,这个需求太常见了!在R里直接写somefun(x = list(a = 10, b = 20))肯定达不到你要的效果——因为R会把x当成字面参数名,而不是你变量x里存的字符串值。这里有两种靠谱的解决办法,看你习惯哪种:
方法1:用Base R的do.call()(无需额外包)
这种方法兼容性拉满,不用装任何扩展包,核心思路是把参数打包成一个命名列表,再传给do.call来调用函数:
x <- "foo" # 或者x = "bar" # 先创建参数列表,把变量x的值作为参数名 params <- list() params[[x]] <- list(a = 10, b = 20) # 如果还有其他固定参数,直接加在列表里就行 params$baz <- 30 # 调用函数 do.call(somefun, params)
这样执行后,就等价于你手动写somefun(foo = list(a=10, b=20), baz=30),当x改成"bar"时,就自动变成somefun(bar = list(...), baz=30)。
方法2:用rlang的!!!拼接运算符(简洁优雅)
如果你平时用tidyverse生态的工具,那rlang包的splice运算符!!!会更顺手,能写出更简洁的代码:
library(rlang) x <- "foo" # 用set_names给参数值指定动态名称,再用!!!拆成函数参数 somefun( !!!set_names(list(list(a = 10, b = 20)), x), baz = 30 # 固定参数直接写就行 )
set_names会把你要传递的参数值(这里是list(a=10,b=20))命名为x的取值,!!!则把这个命名列表“拆”成函数的独立参数,完美实现动态参数名的效果。
内容的提问来源于stack exchange,提问作者dweth
相关产品推荐
相关产品推荐

