这里有一些不起作用的代码。我们的想法是第1步 - 更新列,第2步 - 添加新列,第3步 - 使用新列更新现有列。
library(data.table)
ethanolKcals <- 6.9
ethanol.share.beer <- .04
dt.nutrients <- data.table(carbohydrate_g = runif(10), energy_kcal = runif(10), bevname = c("beer", "wine", "spirits"))
dt.nutrients[bevname == "beer", `:=`(
carbohydrate_g = carbohydrate_g + 100 * ethanol.share.beer,
kcals.ethanol_g = ethanolKcals * ethanol.share.beer,
energy_kcal = energy_kcal + kcals.ethanol_g
)]
看来data.table在开始第3步之前没有完成第2步。我可以通过将第3步移到新语句(例如
)来解决这个问题。dt.nutrients[bevname == "beer",energy_kcal := energy_kcal + kcals.ethanol_g]
但是想知道是否有更清洁的解决方案。