8

Rでのコーディングについての質問です。

私が提供する例は教訓的です。「func1」と「func2」という関数があり、それぞれが 2 つの引数 (スカラーとしましょう) を取るとします。3 つの引数を持つ別の関数 'applyfunction' を指定したい: 使用する関数の最後の番号 ('1' または '2') と、関数の 2 つの引数。たとえば、次のようなことをしたい (もちろんうまくいきません):

applyfunction(1,2,3)それが効果的に実行される場所func1(2,3)

applyfunction(2,9,43)効果的に実行される場所func2(9,43)

何か案は?

ベスト、DB

4

5 に答える 5

7

do.call()リストで指定された引数を使用して関数を呼び出すを参照してください。あなたが望むことを正確に行うラッパーを書くことは難しくありません。

function1=function(a,b)a+b
function2=function(a,b,c)a+b+c

do.call("function1",list(1,2))
do.call("function2",list(1,2,3))

編集: ラッパーは次のようになります。

applyfunction=function(fun,...)do.call(fun,list(...))

applyfunction("function1",1,2)
applyfunction("function2",1,2,3)
于 2011-02-10T16:58:14.643 に答える
6

ここに別の選択肢があります。リストにさらに関数を追加できますswitch

func1 <- function(a, b) a + b
func2 <- function(a, b) a - b
applyfunction <- function(FUN, arg1, arg2) {
  appFun <- switch(FUN,
      func1,  # FUN == 1
      func2,  # FUN == 2
      stop("function ", FUN, " not defined"))  # default
  appFun(arg1, arg2)
}
applyfunction(1,2,3)
# [1] 5
applyfunction(2,9,43)
# [1] -34
applyfunction(3,9,43)
# Error in applyfunction(3, 9, 43) : function 3 not defined
于 2011-02-10T17:15:17.123 に答える
5

あなたが本当にそれを「数字で」やりたいのなら:

> applyfunction=function(n,a,b){get(paste("func",n,sep=""))(a,b)}
> func1=function(a,b){a+b}
> func2=function(a,b){a*b}
> applyfunction(1,4,3)
[1] 7
> applyfunction(2,4,3)
[1] 12

getとpasteを使用して、名前に関連付けられた関数を取得します。

于 2011-02-10T17:34:22.153 に答える
0

関数変数の 1 つをスイッチとして使用するのはどうですか?

func1 <- function(x,y,z) { 
## Function One stuff goes here
if (x == 1) { 
var1 <- 1 
} 
## Function Two stuff goes here 
if (x == 2) { 
var1 <- 2 
}
return(var1)
} 

そして、変数 "x" をスイッチとして、同じ関数を使用できます。

> func1(1,1,1)
[1] 1
> func1(2,1,1)
[1] 2
于 2011-02-10T20:03:56.617 に答える
0

ここでは、切り替えまたは貼り付けの代わりに、インデックスを使用してリストから選択するだけです。

 function1=function(a,b) a+b
 function2=function(a,b,c) a*b
 applyfunc <- function(n, aa, bb){ c(function1, function2)[[n]](aa,bb) }
 applyfunc(1, 4, 3)
 # [1] 7
 applyfunc(2, 4, 3)
 #[1] 12
 applyfunc(3, 4, 3)
# Error in c(function1, function2)[[n]] : subscript out of bounds
于 2011-02-10T21:35:59.500 に答える