【问题标题】:Where am I doing wrong [closed]我在哪里做错了[关闭]
【发布时间】:2022-01-17 17:19:07
【问题描述】:

我正在尝试制作一个 r 代码来计算虚构产品的price。它有无限数量,但在您购买25 之后价格会发生变化。它永远保持不变。价格为2,5,8,12,15,20。这是我的代码:

n<-c(0:9999)
countchange<-seq(25,150, by=25)
price<-c(2,5,8,12,15,20)

for (n in 0:9999) {
   if(n<countchange) {price=price[1]}
    else{price}
  }

pricechange<-function(n){
  coinssum<-n*price
  return(coinssum)  
}

pricechange

【问题讨论】:

  • 我认为你需要澄清你在这里想要达到的目标
  • 抱歉没有说清楚,我试图创建一个函数来计算我可以先用给定数量的硬币购买多少物品。
  • 不要在最后使用return,它会停止for循环。
  • 请选择一个能准确反映您的问题的标题。

标签: r function loops


【解决方案1】:

由于我有点猜测您在这里尝试实现的目标,这里是我猜测的解决方案:

library(tidyverse)

whatCaniAfford <- function(coins){
  price <- tibble(price = c(2,5,8,12,15,20)) %>%
    mutate(
      treshold = cumsum(price*25),
      budget = coins-treshold)
  
  price %>%
    mutate(afford = case_when(
      coins <= 50 & price == 2 ~ floor(coins/2),
      coins <= 50 & price > 2 ~ 0,
      budget > 0 & price < 20 ~ 25,
      budget > 0 & price == 20 ~ floor(lag(budget)/20),
      budget < 0  ~ floor(lag(budget)/price)
    )) %>%
    filter(afford > 0) %>%
    select(price, afford)
  
}

whatCaniAfford(coins = 1000)

# A tibble: 5 × 2
price afford
<dbl>  <dbl>
1     2     25
2     5     25
3     8     25
4    12     25
5    15     21

【讨论】:

  • 太棒了,非常感谢,对于格式错误和不清楚的问题,我们深表歉意。我以为我能以某种方式做到这一点,但这比我想象的要复杂得多,我越是想办法哈哈。谢谢!!!!
  • 这不是最漂亮的解决方案,但也许你可以从这里开始自己写得更好。如果答案解决了您的问题,您可以将答案标记为已接受:-)
  • 是的,标记!我会先尝试了解您的价格循环方式,然后我会尝试制作自己的版本哈哈。