R purrr功能:具有多个参数的灵敏度

时间:2017-07-04 11:42:16

标签: r dplyr purrr

我一直在研究这个问题,似乎无法解决这个问题。

我有一个数据集显示在下面我希望对价格运行现金流敏感度。数据集将附加行,但我遇到的问题是使用具有唯一人工成本的不同价格并将它们与其唯一的工作站相匹配。

a <- data.frame(Name = "station1", units_sold = seq(2000, 3000, by = 2))
b <- data.frame(Name = "station2", units_sold = seq(1000, 2000, by = 2))

monthly_sales <- rbind(a, b)

price_1 <- c(2,3,4,5,6) #price for station_1
price_2 <- c(3,4,5,6,7) #price for station_2

labor1 <- c(1000) #labor for station_1
labor2 <- c(2000) #labor for station_2

我使用的是以下代码,我无法将price_1labor_1应用于station_1,然后将price_2labor_2应用于{{ 1}}为了我的灵敏度。

如何设置station_2功能或cf_model功能以匹配独特的人工和价格参数?

任何帮助将不胜感激!

map

2 个答案:

答案 0 :(得分:2)

很难弄清楚你想要做什么。 如果您对销售的商品,每件商品的价格和(总)人工成本有不同的假设,您想了解您将获得的净收入吗?

如果是这样的话,我认为最快捷的方式就像是。

    scenario_station_1 <- data.frame(a$units_sold %*% t(price_1) - labor1)
    names(scenario_station_1)<-as.character(price_1)

答案 1 :(得分:1)

我相信你要做的是使用map和2个参数,即map2

在这种情况下,您的函数cf_model将是一个函数,它接收两个参数,即price_1price_2的参数;你永远不应该真的需要索引它。

在这个例子中,它将是:

cf_model <- function(price_1, price_2){
  data.frame(Scenario = (a$units_sold*price_1 + b$units_sold*price_2))
}
sensitivity_model <- data.frame(map2(price_1, price_2, cf_model))

head(sensitivity_model)

注意我没有使用你的表monthly_sales。如果我要使用它,那将是:

monthly_sales <- data.frame(station1=a$units_sold, 
                            station2=b$units_sold)
sensitivity_model <- data.frame(map2(price_1, price_2, 
                       ~ list(Sensitivity=.x*monthly_sales$station1 + .y*monthly_sales$station2)))

在这两种情况下,它都具有相同的输出:

> head(sensitivity_model)
  Scenario Scenario.1 Scenario.2 Scenario.3 Scenario.4
1     7000      10000      13000      16000      19000
2     7010      10014      13018      16022      19026
3     7020      10028      13036      16044      19052
4     7030      10042      13054      16066      19078
5     7040      10056      13072      16088      19104
6     7050      10070      13090      16110      19130