2017-03-20 13 views
0

Rで作業しています。私は製品名、年をとり、データベースからさまざまな記述子を含むデータフレームを吐き出す関数を持っています。私は関数を渡したい:引数のすべての順列を関数に適用して1つのデータフレームを作成します

Product <- c("A","B") 

Year <- c("2015","2016") 

そして、それは単一のデータフレームを返すこれらの引数のすべての順列を計算するためです。私はmapplyとrbindを使ってみましたが、それはすべて乱雑です。何かアドバイス?

+1

'expand.grid(Product、Year)' – Zelazny7

+0

おはようございます。 Rは機能に組み込まれていると驚いています。今私はそれを私の機能にどのように適用するのですか? – user79928

+0

あなたの機能は何か分かりませんか?あなたはあなたの引数の順列のdata.frameを返す関数が必要だと述べています。 'f Zelazny7

答えて

2

あなたは、tidyrからpurrrからpmapcrossingの組み合わせを使用し、tidyrからunnestことができます。

library(tidyr) 
library(purrr) 

crossings <- crossing(Product, Year) 
crossings$result <- pmap(crossings, find_product_sales) 
crossings <- unnest(crossings, result) 

これはfind_product_sales機能は、製品と年を取ること、あなたがコメントで説明するように、想定していますデータフレームを返します。

crossingの代わりにexpand.gridを使用できますが、おそらくstringsAsFactors = FALSEも追加することをお勧めします)。

2

まず、引数のリストに分割次に、あなたの引数

params <- expand.grid(Product=Product, Year=Year, stringsAsFactors = F) 

の順列を作成

params <- split(params, seq.int(nrow(params))) 

製品と年最後

my_func <- function(Product, Year) { 
    sprintf("Product: %s, Year: %s", Product, Year) 
} 

を取る機能を持っています、パラメータをループして関数を適用する

lapply(params, function(x) do.call(my_func, x)) 
関連する問題