2

我希望以编程方式创建一个变量名数组,例如:

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

我相信我可以通过以下方式做到这do.call一点:

> 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_"参数传递给pastewithin do.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\")"  

desired_output生产via的正确方法是什么do.call

4

1 回答 1

2

你可以做do.call(paste, c(df, sep="_purchase_")),但也许apply(df, 1, paste, collapse="_purchase_")更直接。

于 2016-04-13T15:58:01.583 回答