我有一个问题,我不确定我是在这里完全愚蠢,还是这是一个真正的问题,或者我是否误解了这些功能的作用。
diff的反面与cumsum相同吗?我以为是的。但是,使用此示例:
$sql_condition = '( 1=2 '; // one fake-condition, just to make it possible to start with 'OR' later
foreach($option[0] as $key => $value) { // iterate through all possible conditions
if($value===1) { // maybe exclude $keys that should not be used here
$sql_condition.=' OR post_type="'.$key.'"';
}
}
$sql_condition.=')';
$results = $wpdb->get_results( 'SELECT * FROM '.$wpdb->prefix.'posts WHERE post_status="publish" AND '.$sql_condition.' ORDER BY post_title ASC', OBJECT );
这些不一样。我哪里出错?
AHHH!星期五。
显然
答案 0 :(得分:4)
功能完全不同: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]
之间的所有元素的结果1}}。相比之下,x[i]
仅取一个元素diff(x)
与下一个x[i]
之间的差异。
x[i+1]
和cumsum
的组合导致不同的结果,具体取决于执行函数的顺序:
diff
这里的结果是九个“1”序列的累积和。请注意,如果将此结果与原始向量> cumsum(diff(x))
# 1 2 3 4 5 6 7 8 9
进行比较,则会丢失最后一个条目x
。
另一方面,通过计算
10
获得一个与原始向量> diff(cumsum(x))
# 2 3 4 5 6 7 8 9 10
类似的向量,但现在缺少第一个条目x
。
在任何情况下都不恢复原始向量,因此不能说明1
是cumsum()
答案 1 :(得分:3)
你忘了考虑第一个元素的影响
dd == c(dd [[1]],dd [[1]] + cumsum(diff(dd)))
答案 2 :(得分:1)
@RHertel回答得很好,说明diff()
会返回length(x)-1
的向量。
因此,另一个简单的解决方法是将0
添加到原始向量的开头,以便diff()
计算x[1]
和0
之间的差异。
> x <- 5:10
> x
#[1] 5 6 7 8 9 10
> diff(x)
#[1] 1 1 1 1 1
> diff(c(0,x))
#[1] 5 1 1 1 1 1
这样可以将diff()
与c()
一起用作cumsum()
> cumsum(diff(c(0,x)))
#[1] 1 2 3 4 5 6 7 8 9 10
> diff(c(0,cumsum(x)))
#[1] 1 2 3 4 5 6 7 8 9 10
答案 3 :(得分:0)
如果您知道“滞后”和“差异”的值。
x<-5:10
y<-diff(x,lag=1,difference=1)
z<-diffinv(y,lag=1,differences = 1,xi=5) #xi is first value.
k<-as.data.frame(cbind(x,z))
k
x z
1 5 5
2 6 6
3 7 7
4 8 8
5 9 9
6 10 10