2016-11-24 34 views
3

ベースRの使用に関する質問があります。それは私の問題の解決策を見つけることができなかった前に尋ねられることがあります。R関数:省略記号付き引数の受け渡し

私は別の関数を呼び出す関数を持っています。 2番目の関数の引数は、省略記号(...)を使用して渡されます。ただし、エラーメッセージ:object "OBJECT" not foundが表示されます。

f1 <- function(a, ...) { 
    print(a) 
    f2(...) 
} 
f2 <- function(...) { 
    print(b == TRUE) 
    print(runif(c)) 
} 
f1(2, b = FALSE, c = 2) 

これは私に:Error in print(b == TRUE) : object 'b' not foundを与えます。

args <- list(...)を使用してこの問題を回避し、各引数を別々に呼び出すことは可能ですが、多くの引数(2つだけではない)を持つと複雑になると思います。

質問
はどのように省略記号を使用してf2f1から引数を渡す方法は?

+1

'f2'がどのような引数を扱うのか知っているので、特定の引数を使って' f2'を定義してみませんか?また、 'list(...)$'とは別に、もっと便利であれば '..1'などで' ... 'にアクセスすることができます。 –

答えて

6

の引数にすべての引数f2を指定すると、省略記号が使用されます。 f2を宣言しても、通常の関数のように扱わなければならないので、引数bcを指定してください。

f1 <- function(a, ...) { 
    print(a) 
    f2(...) 
} 

# Treat f2 as a stand-alone function 
f2 <- function(b, c) { 
    print(b == TRUE) 
    print(runif(c)) 
} 

f1(2, b=FALSE, c=2) 

[1] 2 
[1] FALSE 
[1] 0.351295 0.9384728 
関連する問題