0

次のコードと出力。

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.call2つのケースで異なる結果が得られる理由がわかりませんsubstitute(list(...))が、同じ結果が得られます。

関数「indd」を呼び出して、関数「ind」とまったく同じように機能させる方法は?

どうもありがとうございました!

4

1 に答える 1

0

match.call2つのケースで異なる結果が得られる理由はまだわかりません。

しかし、関数「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)")))
}
于 2013-06-07T20:58:29.003 に答える