计算传递给函数的参数数量
Count number of arguments passed to function
我对计算传递给函数的参数数量很感兴趣。 length
不能用于该目的:
>> length(2,2,2,2,2)
Error in length(2, 2, 2, 2, 2) :
5 arguments passed to 'length' which requires 1
这很明显,因为 length
接受 1 个参数,所以:
length(c(2,2,2,2,2))
会产生预期的结果 - 5。
解决方案
我想这样调用我的函数 myFunction(arg1, arg2, arg3)
。 这可以通过使用省略号来完成:
myCount <- function(...) {length(list(...))}
myCount
会产生想要的结果:
>> myCount(2,2,2,2,2)
[1] 5
问题
这非常低效。我在大量参数上调用此函数,创建列表只是为了计算对象的数量是一种浪费。返回传递给函数的参数数量的更好方法是什么?
怎么样
myCount <- function(...) {length(match.call())-1}
这只是检查传递的调用(并删除函数名称本身的 1)
这里有一种使用 length()
和 purrr::lift_*()
系列函数的优雅方式。
通常您将多个参数传递给 length()
,这是行不通的,因为 length()
将向量或列表作为输入。
所以我们需要的是将输入从vector/list转换为...
(点)。 purrr::lift_*()
系列提供了一系列这样做的功能。
一个选项可以从矢量转换为点:
> lift_vd(length)(2, 2, 2, 2, 2)
[1] 5
另一个选项可以从列表转换为点:
> lift_ld(length)(2, 2, 2, 2, 2)
[1] 5
这两个选项都运行良好,您需要在 length()
上使用 purrr::lift_*()
函数之一,然后再将拼接参数传递给它。
nargs returns 提供给该函数的参数数量
myCount <- function(...) {
nargs()
}
> myCount(2,2,2,2,2)
[1] 5
引用https://stat.ethz.ch/R-manual/R-devel/library/base/html/nargs.html
我对计算传递给函数的参数数量很感兴趣。 length
不能用于该目的:
>> length(2,2,2,2,2)
Error in length(2, 2, 2, 2, 2) :
5 arguments passed to 'length' which requires 1
这很明显,因为 length
接受 1 个参数,所以:
length(c(2,2,2,2,2))
会产生预期的结果 - 5。
解决方案
我想这样调用我的函数 myFunction(arg1, arg2, arg3)
。 这可以通过使用省略号来完成:
myCount <- function(...) {length(list(...))}
myCount
会产生想要的结果:
>> myCount(2,2,2,2,2)
[1] 5
问题
这非常低效。我在大量参数上调用此函数,创建列表只是为了计算对象的数量是一种浪费。返回传递给函数的参数数量的更好方法是什么?
怎么样
myCount <- function(...) {length(match.call())-1}
这只是检查传递的调用(并删除函数名称本身的 1)
这里有一种使用 length()
和 purrr::lift_*()
系列函数的优雅方式。
通常您将多个参数传递给 length()
,这是行不通的,因为 length()
将向量或列表作为输入。
所以我们需要的是将输入从vector/list转换为...
(点)。 purrr::lift_*()
系列提供了一系列这样做的功能。
一个选项可以从矢量转换为点:
> lift_vd(length)(2, 2, 2, 2, 2)
[1] 5
另一个选项可以从列表转换为点:
> lift_ld(length)(2, 2, 2, 2, 2)
[1] 5
这两个选项都运行良好,您需要在 length()
上使用 purrr::lift_*()
函数之一,然后再将拼接参数传递给它。
nargs returns 提供给该函数的参数数量
myCount <- function(...) {
nargs()
}
> myCount(2,2,2,2,2)
[1] 5
引用https://stat.ethz.ch/R-manual/R-devel/library/base/html/nargs.html