20

関数の一部として、デフォルト値を含むすべての引数とその値のリストを出力したいと考えています。たとえば、次の引数を持つ関数:

foo <- function(x=NULL,y=NULL,z=2) {
  #formals()
  #as.list(match.call())[-1]
  #some other function?....
}

そのような出力を与えるには:

> foo(x=4)

$x
[1] 4

$y
NULL

$z
[1] 2

formals関数が呼び出されたときに値の引数値を与えるために更新されません。match.callしますが、引数のデフォルトは提供しません。私が望むように出力を提供する別の機能はありますか?

4

4 に答える 4

31

うまくいけば、これがドラゴンにつながらないことを願っています。

foo <- function(x=NULL,y=NULL,z=2) {
  mget(names(formals()),sys.frame(sys.nframe()))

}

foo(x=4)

$x
[1] 4

$y
NULL

$z
[1] 2

print(foo(x=4))

$x
[1] 4

$y
NULL

$z
[1] 2
于 2013-01-18T12:10:37.170 に答える
12

match.call2を組み合わせて使用​​できます。formals

foo <- function(x=NULL,y=NULL,z=2)
{
  ll <- as.list(match.call())[-1]     ## 
  myfor <- formals(foo)               ## formals with default arguments
  for ( v in names(myfor)){
             if (!(v %in% names(ll)))
                ll <- append(ll,myfor[v])  ## if arg is missing I add it
             }
  ll
}

例えば ​​:

  foo(y=2)
$y
[1] 2

$x
NULL

$z
[1] 2

> foo(y=2,x=1)
$x
[1] 1

$y
[1] 2

$z
[1] 2
于 2013-01-18T11:45:38.270 に答える
5
 foo <- function(x=NULL,y=NULL,z=2) {
   X <- list(x,y,z); names(X) <- names(formals()); X
 }
 z <- foo(4)
 z
#------
$x
[1] 4

$y
NULL

$z
[1] 4
于 2013-01-18T18:28:17.667 に答える