You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在R语言中如何将函数参数存储到变量并按名称传递给函数?

在R语言中如何将函数参数存储到变量并按名称传递给函数?

哈哈,这个坑我刚帮同事踩过!你直接把参数list传给函数的写法,R会把整个list当成一个位置参数塞进去,而不是自动展开里面的命名参数——就像你把一堆打包好的调料直接递给厨师,厨师以为你要的是这个包裹本身,而不是里面的盐和糖,难怪得不到想要的图~

给你两个最常用的解决办法,按需选就行:

方法一:用基础R的do.call()(通用不挑环境)

这是基础R里专门干这个事的函数,它的核心作用就是“把函数和参数list组装起来执行”,会自动把list里的命名参数精准对应到函数的同名参数上。

用法很简单:你需要把barplot的第一个必填参数(也就是height,对应你的data)和自定义的myArgs合并成一个完整的参数list,然后传给do.call

data <- c(4, 5, 2)
myArgs <- list(col = c("blue", "green", "red"), main = "My Data")

# 合并height参数和自定义参数,再用do.call执行
do.call(barplot, c(list(height = data), myArgs))

如果你的myArgs里本来就包含了height = data,那直接写do.call(barplot, myArgs)就行,不用合并,更省事。

方法二:用rlang包的!!!操作符(写法更直观)

如果你平时常用tidyverse的工具,那!!!(三个感叹号)这个操作符绝对是你的菜——它能直接把list里的参数“拆包”,效果和你手动把每个参数写在函数里完全一样。

先确保装了rlang包(没装的话先跑install.packages("rlang")),然后这么写:

library(rlang)

data <- c(4, 5, 2)
myArgs <- list(col = c("blue", "green", "red"), main = "My Data")

# 用!!!展开myArgs里的所有命名参数
barplot(data, !!!myArgs)

这个写法看起来和你最初想的barplot(data, myArgs)几乎一样,只是多了三个感叹号,但效果天差地别——R会把myArgs里的colmain分别对应到barplot的同名参数上,完美实现你的需求。

最后补个小提醒:为啥你原来的写法不行?因为barplot的第二个位置参数是width,你直接传myArgs的话,R会把整个list当成width的值,这显然不是你要的,所以必须用“拆包”的方式把list里的参数逐个传递~

火山引擎 最新活动