2016-04-13 6 views
1

の内側に機能するためにオプションの引数を渡すために:私は私のようなものの上に構築し、do.callでこれを行うことができると信じてどのように私は、プログラムのような変数名の配列を作成したいdo.call

desired_output <- c("first_purchase_date","last_purchase_date","largest_purchase_date", 
        "first_purchase_amount","last_purchase_amount","largest_purchase_amount") 

を:

> do.call(paste, expand.grid(c("first","last","largest"),c("date","amount"))) 
[1] "first date"  "last date"  "largest date" "first amount" "last amount" "largest amount" 

しかし、sep="_purchase_"引数をpastedo.call以内に渡す方法を理解できません。 ?do.callで私は

argsは、関数呼び出しの引数のリストであることを読みました。 names 属性がargsの場合、引数名が与えられます。

これを組み込むしようとすると、私が試してみました:

df <- expand.grid(c("first","last","largest"), 
        c("date","amount"), 
        stringsAsFactors = FALSE) 

do.call(paste, args = list(...=df, sep="_purchase_")) 
# does not return desired output, but instead: 
# [1] "c(\"first\", \"last\", \"largest\", \"first\", \"last\", \"largest\")" 
# [2] "c(\"date\", \"date\", \"date\", \"amount\", \"amount\", \"amount\")" 

do.call経由desired_outputを生成するための正しい方法は何ですか?

+0

私はあなたが 'do.call(paste、c(df、sep =" _ purchase _ "))'をしたいと思います。 – eipi10

+0

また、私はこれが動作することを知っています: 'mapply(paste、df $ Var1、df $ Var2、MoreArgs = list(sep =" _ purchase _ "))' – C8H10N4O2

+0

@ eipi10は動作します。 、私は受け入れるよ – C8H10N4O2

答えて

2

do.call(paste, c(df, sep="_purchase_"))を使用できますが、apply(df, 1, paste, collapse="_purchase_")の方が簡単です。

+0

とstr(c、d、sep = "_ purchase _")) 'と' str(list(df、sep = "_ purchase_") ) '。どちらもリストですが、前者は後者が生成するネストされた構造ではなく、 'paste()'が期待している "フラット"な構造になっています。 – C8H10N4O2