在R中创建一个带有可变数量参数的函数

21

在R中创建一个函数时,通常需要指定参数数量,例如:

function(x,y){
}

这意味着它只需要两个参数。但是当没有指定参数的数量时(例如,有些情况下我需要使用两个参数,而另一些情况下我需要使用三个或更多的参数),我们该如何处理这个问题?由于我对编程相当新手,因此示例将非常受欢迎。


你可以将所有变量放在一个列表中而不是单独传入每个变量。该列表可以是任意长度。因此,x将成为一个列表。 - Linus
1
你正在寻找“省略号”。 - Onyambu
2个回答

38
d <- function(...){
    x <- list(...) # THIS WILL BE A LIST STORING EVERYTHING:
    sum(...)       # Example of inbuilt function
}

d(1,2,3,4,5)

[1] 15 

把它放在列表中可能适用于Lzz0想要做的任何事情,但是请注意,在您的示例中,您可以跳过列表和unlist,只需执行sum(...) - IceCreamToucan
谢谢,但我又想到了另一个问题。如果我想使用一个列表进行求和,另一个列表进行减法,会出现什么情况呢?我的意思是,我能否提供两组列表(每组列表的变量数量不确定)。 - Lzz0
你需要更新问题并提供示例,或者提出一个不同的问题。我真的不明白你的意思。如果你需要对两个列表进行减法运算,可以使用Map函数。 - Onyambu
假设在你的例子中,如果我输入d(1,2,3,....10,11)任何数字,最后两个数字总是给我它们的乘积,其他数字是它们的总和。我的意思是我想从一个输入列表返回两个输出。 - Lzz0
1
d=function(...){x=list(...);c(sum=sum(unlist(head(x,-2))),prod=prod(unlist(tail(x,2))))} 这样就可以解决问题了。 - Onyambu

18
你可以使用...来指定额外的参数数量。例如:
myfun <- function(x, ...) {
    for(i in list(...)) {
        print(x * i)
    }
}

> myfun(4, 3, 1)
[1] 12
[1] 4
> myfun(4, 9, 1, 0, 12)
[1] 36
[1] 4
[1] 0
[1] 48
> myfun(4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接