【发布时间】:2018-04-27 13:45:31
【问题描述】:
我正在尝试构建一个更自定义的 cumsum 版本以在 data.table 上使用,但第一步我失败了:
numbers <- data.table(num=1:10)
sum <- 0
cumFunct <- function(n) {
sum <<- sum+n
return(sum)
}
numbers[, cum:=sapply(num, cumFunct)]
虽然这可行,但它非常不干净。在我运行函数之前,它还需要将 sum 设置为 0。
现在,我该如何以更简洁的方式编写它?本质上,如何在不使用全局变量的情况下将中间结果传递给cumFunct 的下一次迭代?
非常感谢!
【问题讨论】:
-
你可能不应该问怎么做
this,但我怎么才能做到this2。你想计算什么? -
答案可能取决于您希望如何自定义 cumsum 函数;也许您的自定义可以应用于 cumsum 的输出,例如
numbers[, cum:=2*cumsum(num)] -
嘿 - 不,它会涉及更多。上下文是计算回报系列的绩效费用,当我通过行时,我需要随身携带一些变量。
-
更具体地说:我有一个从 0 开始并根据特定函数逐行增加的高水位线图,并根据我需要计算的高水位线的水平我对特定行的结果。我可以在没有存储此高水位标记的全局变量的情况下实现此目的吗?即,我可以在遍历行时继续传递它吗?
标签: r data.table sapply cumsum