3

R 関数内の引数に格納されているものを知りたい場合は...、次のように単純にリストに変換できます。

foo <- function(...)
{
  dots <- list(...)
  print(dots)
}

foo(x = 1, 2, "three")
#$x
#[1] 1
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] "three"

私が理解できない...のは、呼び出し関数で評価する方法です。この次の例では、 の内容が引数をbazに返すようにします。...bar

bar <- function(...)
{
  baz()
}

baz <- function()
{ 
  # What should dots be assigned as?
  # I tried                                           
  # dots <- get("...", envir = parent.frame())
  # and variations of
  # dots <- eval(list(...), envir = parent.frame())
  print(dots)
}

bar(x = 1, 2, "three")

get("...", envir = parent.frame())<...>これは有望に見えますが、そこから有用なものを抽出する方法がわかりません。

eval(list(...), envir = parent.frame())...が間違って使用されていると主張して、エラーをスローします。

...からを取得するにはどうすればよいbarですか?

4

3 に答える 3

3

理解した。evalとの組み合わせが必要でしたsubstitutebazとして定義する必要があります

baz <- function()
{ 
  dots <- eval(substitute(list(...), env = parent.frame()))
  print(dots)
}
于 2010-08-09T17:00:56.010 に答える
1

これは機能するはずです:

bar <- function(...)
{
  baz(...=...)
}

baz <- function(...)
{ 
  print(list(...))
}

bar(x = 1, 2, "three")

サブ関数で割り当てるだけです。

または、親関数のリストとして省略記号を割り当てることができます。

bar <- function(...)
{
  bar.x <- list(...)
  baz()
}

baz <- function()
{ 
  dots <- get("bar.x", envir = parent.frame())
  print(dots)
}

bar(x = 1, 2, "three")

これは同じ考えですが、省略記号を上書きしているため、お勧めしません。

bar <- function(...)
{
  ... <- list(...)
  baz()
}

baz <- function()
{ 
  dots <- get("...", envir = parent.frame())
  print(dots)
}

bar(x = 1, 2, "three")
于 2010-08-09T16:41:46.090 に答える
1

一言で言えば、しないでください。R のスコープ規則を再定義しようとしても、心痛と苦痛に終わる可能性が高いだけです。

于 2010-08-13T02:06:05.687 に答える