我有一个问题,不确定我是否在这里完全傻了,或者这是一个真正的问题,还是我误解了这些功能的作用。
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
Run Code Online (Sandbox Code Playgroud)
这些不一样。我哪里出问题了?
啊!星期五。
明显
函数是完全不同的: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
Run Code Online (Sandbox Code Playgroud)
该函数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
Run Code Online (Sandbox Code Playgroud)
这里的结果是九个“ 1”序列的累加和。请注意,如果将此结果与原始向量进行比较,则会丢失x最后一个条目10。
另一方面,通过计算
> diff(cumsum(x))
# 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
一个获得的向量再次类似于原始向量x,但是现在1缺少第一个条目。
在任何情况下,都不会恢复原始向量,因此不能说它是与向量cumsum()相反或相反的函数diff()