函数在一个数据框中返回其参数的所有排列?

时间:2017-03-20 17:49:27

标签: r function dataframe arguments permutation

我有多年的数据。我有一个函数,它接受一个产品名称,一年,并从数据库中吐出一个包含各种描述符的数据帧。我想将参数传递给函数:

Product <- c("A","B")    
Year <- c("2015","2016")

并计算这些参数的所有排列,返回单个数据帧。我尝试过使用mapply和rbind,但事实证明这一切都很混乱。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用来自tidyr的crossing,来自purrr的pmap和来自tidyr的unnest的组合:

library(tidyr)
library(purrr)

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

正如您在评论中所描述的那样,假设find_product_sales函数获取产品和年份并返回数据框。

(请注意,您可以使用expand.grid代替crossing,但您可能也想添加stringsAsFactors = FALSE

答案 1 :(得分:1)

首先,创建参数的排列

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)
}

最后,循环使用params并应用你的函数

lapply(params, function(x) do.call(my_func, x))