我有一个问题,我不确定我是否在这里完全愚蠢,或者这是否是一个真正的问题,或者我是否误解了这些功能的作用。
diff 的反义词是否与 cumsum 相同?我以为是。但是,使用此示例:
dd <- c(17.32571,17.02498,16.71613,16.40615,
16.10242,15.78516,15.47813,15.19073,
14.95551,14.77397)
par(mfrow = c(1,2))
plot(dd)
plot(cumsum(diff(dd)))
> dd
[1] 17.32571 17.02498 16.71613 16.40615 16.10242 15.78516 15.47813 15.19073 14.95551
[10] 14.77397
> cumsum(diff(dd))
[1] -0.30073 -0.60958 -0.91956 -1.22329 -1.54055 -1.84758 -2.13498 -2.37020 -2.55174
这些不太一样。我哪里错了?
啊!星期五。
明显地
最佳答案
函数完全不同: diff(x)
返回一个长度为 (length(x)-1)
的向量,其中包含向量 x
中一个元素和下一个元素之间的差异,而 cumsum(x)
返回一个长度等于 x
长度的向量,其中包含 x
中元素的总和
例子:
x <- c(1:10)
#[1] 1 2 3 4 5 6 7 8 9 10
> diff(x)
#[1] 1 1 1 1 1 1 1 1 1
v <- cumsum(x)
> v
#[1] 1 3 6 10 15 21 28 36 45 55
函数
cumsum()
是累积和,因此它返回的向量 v[i]
的条目是 x
中 x[1]
和 x[i]
之间所有元素的结果。相比之下, diff(x)
只需要一个元素 x[i]
和下一个元素 x[i+1]
之间的差异。cumsum
和 diff
的组合会导致不同的结果,这取决于函数的执行顺序:> cumsum(diff(x))
# 1 2 3 4 5 6 7 8 9
这里的结果是九个“1”序列的累积和。请注意,如果将此结果与原始向量
x
进行比较,则缺少最后一个条目 10
。另一方面,通过计算
> diff(cumsum(x))
# 2 3 4 5 6 7 8 9 10
获得一个再次类似于原始向量
x
的向量,但现在第一个条目 1
丢失了。在任何情况下都没有恢复原始向量,因此不能说
cumsum()
是 diff()
的相反或反函数关于r - cumsum 与 r 中的 diff 相反,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32009610/