gpt4 book ai didi

用 R 中的列表替换参数

转载 作者:行者123 更新时间:2023-12-04 06:41:05 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Can you pass a vector to a vararg?: Vector to sprintf

(1 个回答)


8年前关闭。




有时有一个函数具有任意数量的参数。例如,bootstrapPage包 Shiny 的功能。如果我有一个 data.frame 并且我想为一行创建一个小部件,那么我还没有想出一种很好的方法来根据 data.frame 的行号传递参数的数量。到目前为止,我生成了脚本并使用了eval(parse(text="...")) 的技巧。

实际上,R 中传递给函数的参数结构(键和值)类似于 list ,所以我想知道是否有办法将参数作为 R 中的列表传递。

更具体地说,如果我有一个函数 f和一个列表 argv , 有没有办法传递 argv 中的对象至 f根据argv的名字匹配和 f 的参数名称,以及 argv 中的位置以及 f 的参数中的位置?

例如,让

f <- function(a, b) a + b
argv <- list(a=1, b=2)

我应该如何通过 argvf相当于 f(a=argv$a, b=argv$b) ?

或者,如果我们有:
f <- function(a, b, ...) { # some codes }
argv <- list(a = 1, b = 2, 3, 4, 5)

我应该如何通过 argvf相当于 f(a=argv$a, b=argv$b, argv[[3]], argv[[4]], argv[[5]]) ?

谢谢!

最佳答案

您正在寻找 do.call .

do.call(f, argv)

这里有些例子
> args <- list(n = 10, mean = 3, sd = .5)
> do.call(rnorm, args)
[1] 3.589416 3.393031 2.928506 2.503925 3.316584 2.581787 2.686507 3.178877
[9] 3.083885 2.821506
> do.call(rnorm, list(10, 3, .5))
[1] 3.964526 2.838760 2.436684 3.068581 1.842332 3.739046 4.050525 3.097042
[9] 3.665041 3.535947
> f <- function(a, b) a + b
> argv <- list(a=1, b=2)
> do.call(f, argv)
[1] 3
> f <- function(a, b, ...){print(a);print(b);print(sum(...))}
> argv <- list(a=1,b=2, 3, 4, 5)
> do.call(f, argv)
[1] 1
[1] 2
[1] 12

关于用 R 中的列表替换参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com