使用...将索引传递给函数

时间:2013-06-07 20:29:28

标签: r

以下代码和输出。

ind <- function(x, ..., drop=T) { x[...,,drop=drop]}
indd <- function(x, ..., drop=T) { ind(x, ..., drop=drop)}
x=array(1:24,1:4)
ind(x,,1,)
##      [,1] [,2] [,3] [,4]
## [1,]    1    7   13   19
## [2,]    3    9   15   21
## [3,]    5   11   17   23
indd(x,,,1,)
## Error in ind(x, ..., drop = drop) : argument is missing, with no default.

为什么...适用于“ind”功能但不适用于“indd”功能?

当我直接调试函数“ind”(ind(x,,1,))时,我得到了

match.call(expand.dots=FALSE)
## ind(x = x, ... = list(, 1, ))
substitute(list(...))
## list(, 1, )

但是,如果调试是由“indd”(indd(x,,1,))触发的,那么我得到了

match.call(expand.dots=FALSE)
## ind(x = x, ... = list(..1, 1, ..3), drop = drop)
substitute(list(...))
## list(, 1, )

我不明白为什么match.call在这两种情况下会给出不同的结果,但substitute(list(...))会给出相同的结果。

如何通过调用函数“indd”使函数“indd”与函数“ind”相同?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我仍然不明白为什么match.call会在两种情况下给出不同的结果。

但我找到了修复“indd”功能的技巧。

indd <- function(x, ..., drop=T)
{ 
  car = as.character(match.call(expand.dots=FALSE)$...)
  eval(parse(text=paste("ind(x,", paste(car, ",", collapse=""), "drop=drop)")))
}