2

例えば:

method1 <- function(alpha,beta,ff)

Rはこれを許可しますか?

私が達成しようとしていることは、次のとおりです。私には一般的な方法がありmethod1ます。そして、私には他の方法があります:f2,f3,f4。のようにしたいと思いますmethod1 <- function(a,b, ff)。ここで、abは定数であり、最も重要なのは、コンソールで関数を呼び出す方法に応じて、またはのffいずれf2かになります。理想的には行列を計算します。f3f4f2, f3, f4

以下のあなたの答えの例を使用して、私はなぜ私が代わりにこれを持っていることができないのか疑問に思いましたか?

f1 <- function(a,b,ff(a,b))
{
    solve(ff(a,b))
}
f2 <- function (x,y){
    Diag(x*y)
}

これは本当に悪い例です。しかし、なぜ引数にff(a、b)を含めることができないのか知りたいのですが??? 書く論理は何ですか?

f1 <-function(a、b、ff){ff(a、b)}

4

1 に答える 1

10

あなたが何を意味するかに依存します。関数を引数として別の関数に渡すことができ、デフォルトの引数を関数にすることができます。

f <- function(a,b,f2=function(x,y) { x+y}) {
   f2(a,b)
}
f(1,2) ## 3

関数呼び出しの結果を渡すことができます。

f <- function(a,b,c) { a + b + c }
f3 <- function(x,y) { x*y }
f(1,2,f3(3,4))

ただし、指定したとおりに実行することはできません引数には、標準の変数命名規則に従って名前を付ける必要があります(を参照?make.names)。

f <- function(a,b,f2(1,3)) { ... ## error

バックティックを使用するか、を割り当てることでそれを行うことができますが、それはnames(formals(f))[3] <- "f2(1,3)"危険であり、おそらくあなたが望んでいたものではありません。

function(a,b,`f2(1,3)`) { }

あなたがやろうとしていることの文脈をもう少し説明すると、もっと意味のある答えが得られるかもしれません...

編集:あなたの説明に基づいて推測すると、あなたは私が上で説明した最初のものが欲しいです。

f1 <- function(a,b,ff) {
   ff(a,b) 
}
f2 <- function(x,y) diag(x)*y
f3 <- function(x,y) matrix(runif(x*y),nrow=x,ncol=y)
f4 <- function(x,y) outer(seq(x),seq(y))
f1(2,2,f2)
##      [,1] [,2]
## [1,]    2    0
## [2,]    0    2
f1(2,2,f3)
##             [,1]       [,2]
## [1,] 0.773723089 0.09640121
## [2,] 0.006206349 0.84351541
f1(2,2,f4)
##      [,1] [,2]
## [1,]    1    2
## [2,]    2    4
于 2012-10-23T23:31:40.877 に答える