5

再帰的に適用する関数内で現在の関数を取得するにはどうすればよいですか? 以下は簡単な例です。

myfun <- function(x) {
  if(is.list(x)){
    lapply(x, myfun)
  } else {
    length(x)
  }
}

代わりに匿名にしたいlapplyのですが、名前がない場合に現在の関数を使用するように指示する方法がわかりません。私は試しRecallましたが、うまくいきません:

(function(x) {
  if(is.list(x)){
    lapply(x, Recall)
  } else {
    length(x)
  }
})(cars)

無名関数にもmatch.call()[[1]]役立ちません。

4

2 に答える 2

4

sys.function(0)たとえば、リストの二乗を再帰的に計算するには:

(function(x) {
  if(length(x)>2){
    lapply(x,sys.function(0))
  } else {
    x^2
  }
})(list(1,2,3))

 [[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1] 9
于 2013-10-31T18:58:32.273 に答える
1

あなたが探しているのは、私が思うに、次のsys.functionとおりです。

> (function() print(sys.function(1)))()
function() print(sys.function(1))

Recall実際に言う:

local匿名の再帰関数を記述する別の方法について。

アイデアは、名前をローカルで定義することです。

local(myfun <- function(...) { ... myfun(...) ... })

そして、それは外部で定義されていません。

于 2013-10-31T18:47:54.403 に答える