2017-09-15 5 views
2

関数に引数として渡したい任意の数のRオブジェクトがあります。オブジェクトの命名規則は "input_ \ d +"であり、文字列 "input_"の後に1つ以上の数字が続く。これらの引数の3つだけの静的例は次のようになります。パターンマッチンに基づいて引数を渡します。R

my_function <- function(input_1, input_2, input_3) 

私はパタパタ「INPUT_の\ dの+」を満たすすべてのオブジェクトのためのR「見た目」を作り、それを渡すようにしなければならないだろうか関数のコードは(もちろん、渡された任意の数のパラメータを扱うことができます)。何かアドバイスが高く評価されるだろう

オリ

+2

このような状況ではどうでしたか?関連するオブジェクトがたくさんある場合は、おそらくリストに含まれているはずです。同様の名前のオブジェクトを環境内に持つことは、データを追跡して使用するRのような方法ではありません。 – MrFlick

+0

私は知っています。私はリストのシーケンスを受け入れるサードパーティ関数を使用しています(リストのリストではなく、上記の例では "input_1"は "input_2"などのリストです)。私は前に "平坦化"していた(purrr:flattenを使って)リストのリストを渡すのにうんざりしましたが、これはうまくいきません。 – Oliver

+1

でも、do.callを使うとリストを別のパラメータに簡単に切り替えることができます。最初にリストにデータを格納することは、まだまだ簡単です。 – MrFlick

答えて

5

あなたはすべての入力の名前のリストを作成し、あなたのために少し変更する必要がありますあなたの関数にそのリストを渡すことmgetlsを使用することができますその種の入力:

my_function(mget(ls(pattern = "^input_\\d+$"))) 
+0

必要に応じて 'do.call(" my_function "、mget(ls(pattern ="^input _ \\ d + $ ")))'を使用して別のパラメータとして渡します。 – MrFlick

1

getを使用してオブジェクトの名前で検索することができます。

input_1 <- 1 
input_2 <- 2 
input_3 <- 3 

my_function <- function(input_1) { 
    print(input_1^input_1) 
} 

for(i in 1:3) { 
    foo_1 <- get(paste0("input_", i)) 
    my_function(foo_1) 
} 

1 
4 
27 
関連する問題