如何在编写自己的函数时使用R的省略功能?R语言有一个很好的特性来定义函数,这些函数可以使用可变数量的参数。例如,函数data.frame接受任意数量的参数,每个参数将成为结果数据表中某列的数据。示例用法:> data.frame(letters=c("a", "b", "c"), numbers=c(1,2,3), notes=c("do", "re", "mi"))
letters numbers notes1 a 1 do2 b 2 re3 c 3 mi函数的签名包括省略号,如下所示:function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
stringsAsFactors = default.stringsAsFactors()) {
[FUNCTION DEFINITION HERE]}我想编写一个类似的函数,获取多个值并将它们合并为一个返回值(以及一些其他处理)。为了做到这一点,我需要弄清楚如何“解压”...函数中的参数。我不知道该怎么做。函数定义中的相关行data.frame是object <- as.list(substitute(list(...)))[-1L]我完全搞不懂。那么,如何将省略号从函数的签名转换成列表呢?更确切地说,我怎么写get_list_from_ellipsis在下面的代码里?my_ellipsis_function(...) {
input_list <- get_list_from_ellipsis(...)
output_list <- lapply(X=input_list, FUN=do_something_interesting)
return(output_list)}my_ellipsis_function(a=1:10,b=11:20,c=21:30)编辑似乎有两种可能的方法来做到这一点。他们是as.list(substitute(list(...)))[-1L]和list(...)..然而,这两种做法并不完全相同。(关于差异,请参见答案中的示例。)谁能告诉我他们之间的实际区别是什么,以及我应该使用哪一个?
3 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
list()
> test.func <- function(...) { lapply(list(...), class) }> test.func(a="b", b=1)$a[1] "character"$b[1] "numeric"
get_list_from_ellipsis
list
.
c()
data.frame()
...
LEATH
TA贡献1936条经验 获得超6个赞
get_list_from_ellipsis1 <- function(...){ list(...)}get_list_from_ellipsis1(a = 1:10, b = 2:20) # returns a list of integer vectors$a [1] 1 2 3 4 5 6 7 8 9 10$b [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
get_list_from_ellipsis2 <- function(...){ as.list(substitute(list(...)))[-1L]}get_list_from_ellipsis2(a = 1:10, b = 2:20) # returns a list of calls$a1:10$b2:20
my_ellipsis_function
- 3 回答
- 0 关注
- 1101 浏览
添加回答
举报
0/150
提交
取消