我正在尝试使用WHILE来实现这一目标,但这对我来说太复杂了,一定有一种使用dplyr库的方法。
我有一个仓库,里面有:
product_id amount
1 1001 1
2 4911 100
3 4014 32
我正在编写一个函数,该函数将传递product_id和数量,并取出所需的数量,如果不存在product_id或数量大于可用数量的产品,则会返回错误。
因此,如果我运行该函数:
remove_warehouse(1001,1)
结果应为:
product_id amount
1 4911 100
2 4014 32
如果我跑得快,
remove_warehouse(240,1)
或
remove_warehouse(4014,60)
我应该得到一个通用错误,“数量不足或产品不存在”
答案 0 :(得分:3)
编写函数的一种方法可能是
remove_warehouse <- function(df, product_id, amount) {
id = df$product_id == product_id
if (any(id))
amount_base = df$amount[id]
else
stop("No id present")
if (amount > amount_base)
stop("No sufficient amount")
else
df$amount[id] = df$amount[id] - amount
df
}
remove_warehouse(df, 4911, 90)
# product_id amount
#1 1001 1
#2 4911 10
#3 4014 32
remove_warehouse(df, 1234, 12)
#Error in remove_warehouse(df, 1234, 12) : No id present
remove_warehouse(df, 1001, 100)
#Error in remove_warehouse(df, 1001, 100) : No sufficient amount
这是假设您的product_id
中只有一个df
。
数据
df <- structure(list(product_id = c(1001L, 4911L, 4014L), amount = c(1L,
100L, 32L)), .Names = c("product_id", "amount"), class = "data.frame",
row.names = c("1", "2", "3"))