我有多年的数据。我有一个函数,它接受一个产品名称,一年,并从数据库中吐出一个包含各种描述符的数据帧。我想将参数传递给函数:
Product <- c("A","B")
Year <- c("2015","2016")
并计算这些参数的所有排列,返回单个数据帧。我尝试过使用mapply和rbind,但事实证明这一切都很混乱。有什么建议吗?
答案 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))