18

私はR関数を持っています:

myFunc <- function(x, base='') {
}

関数を拡張して、任意の追加引数のセットを許可します。

myFunc <- function(x, base='', ...) {
}

パラメータで部分的な引数の一致を無効にするにはどうすればよいbaseですか? 関数の下位互換性を維持したいので、...前に置くことはできません(明示的に名前を付けずに as と呼ばれることがよくあります)。base=''myFunction('somevalue', 'someothervalue')base

私は自分の関数を次のように呼び出すことで刺されました:

myFunc(x, b='foo')

これを意味したいのですbase='', b='foo'が、R は部分一致を使用し、 を想定してbase='foo'います。

myFuncどの引数名が渡されたかを判断し、正確な「ベース」のみをbaseパラメーターに一致させるために挿入できるコードはあり...ますか?

4

6 に答える 6

7

ここにアイデアがあります:

myFunc <- function(x, .BASE = '', ..., base = .BASE) {
    base
}

## Takes fully matching named arguments       
myFunc(x = "somevalue", base = "someothervalue")
# [1] "someothervalue"

## Positional matching works
myFunc("somevalue", "someothervalue")
# [1] "someothervalue"

## Partial matching _doesn't_ work, as desired
myFunc("somevalue", b="someothervalue")
# [1] ""
于 2013-03-07T07:24:09.033 に答える
-2

これはうんざりするほど恐ろしいハックですが、仕事を成し遂げるかもしれません:

myFunc <- function(x, base='', b=NULL, ba=NULL, bas=NULL, ...) {
  dots <- list(b=b, ba=ba, bas=bas, ...)
  #..
}
于 2013-03-07T07:25:30.503 に答える