R范围:1:0-不合逻辑的行为
我有一个长度为N的数组X,我想计算R范围:1:0-不合逻辑的行为,r,range,R,Range,我有一个长度为N的数组X,我想计算sum(X[(I+1):N])-sum(X[1:(I-1)]。如果我的索引I在2..(N-1)之内,这就可以了。如果它等于1,则第二项将返回数组的第一个元素,而不是将其排除。如果它等于N,则第一项将返回数组的最后一个元素,而不是将其排除。seq_len是我所知道的唯一执行此操作的函数,但仅适用于第二项(它索引为1:N).我需要的是一个范围函数,它将返回NULL(而不是像seq一样抛出异常)当它的第二个参数低于第一个参数时,求和函数将完成其余的工作。有人知道吗,或
sum(X[(I+1):N])-sum(X[1:(I-1)]
。如果我的索引I在2..(N-1)之内,这就可以了。如果它等于1,则第二项将返回数组的第一个元素,而不是将其排除。如果它等于N,则第一项将返回数组的最后一个元素,而不是将其排除。seq_len是我所知道的唯一执行此操作的函数,但仅适用于第二项(它索引为1:N).我需要的是一个范围函数,它将返回NULL(而不是像seq一样抛出异常)当它的第二个参数低于第一个参数时,求和函数将完成其余的工作。有人知道吗,或者我必须自己写一个吗?我建议另一种生成索引序列的路径:seq_len
,它会在极端情况下直观地做出反应
前面的底线:使用sum(X[-seq_len(i)])-sum(X[seq_len(i-1)])
首先,一些样本数据:
X <- 1:10
N <- length(X)
还有另一个错误,在第一个子集中,您希望“没有”
相反,我建议您使用seq_len
:
i <- 1
X[-seq_len(i)]
# [1] 2 3 4 5 6 7 8 9 10
X[seq_len(i-1)]
# integer(0)
i <- 10
X[-seq_len(i)]
# integer(0)
X[seq_len(i-1)]
# [1] 1 2 3 4 5 6 7 8 9
现在我们得到:
func <- function(i, x) sum(x[-seq_len(i)]) - sum(x[seq_len(i-1)])
sapply(c(1,2,3,10), func, X)
# [1] 54 51 46 -45
因此,这表明在i
的任意值处的求和值为
Xs <- Xa - Xb
Xs
# [1] 54 51 46 39 30 19 6 -9 -26 -45
Xs我建议一种生成索引序列的替代路径:seq_len
,它会在极端情况下直观地做出反应
前面的底线:使用sum(X[-seq_len(i)])-sum(X[seq_len(i-1)])
首先,一些样本数据:
X <- 1:10
N <- length(X)
还有另一个错误,在第一个子集中,您希望“没有”
相反,我建议您使用seq_len
:
i <- 1
X[-seq_len(i)]
# [1] 2 3 4 5 6 7 8 9 10
X[seq_len(i-1)]
# integer(0)
i <- 10
X[-seq_len(i)]
# integer(0)
X[seq_len(i-1)]
# [1] 1 2 3 4 5 6 7 8 9
现在我们得到:
func <- function(i, x) sum(x[-seq_len(i)]) - sum(x[seq_len(i-1)])
sapply(c(1,2,3,10), func, X)
# [1] 54 51 46 -45
因此,这表明在i
的任意值处的求和值为
Xs <- Xa - Xb
Xs
# [1] 54 51 46 39 30 19 6 -9 -26 -45
Xs而不是1:(i-1)
,我建议seq_len(i-1)
,因为如果i==1,它将返回integer(0)
。如果我看到我的帖子,我自己注意到seq_len是为1:0做的,而不是为(i+1):n当i=n而不是1:时,我建议seq len(i-1)
,因为如果i==1,它将返回integer(0)
。如果我看到我的帖子,我自己注意到seq_len是按1:0做的,但不是按(i+1)做的,它将出错:n当i=ndi没有想到从索引中减去seq_len时,我感到羞耻。感谢所有的答案!没有想到从索引中减去seq_len,我感到羞耻。感谢所有的答案!
Xs <- Xa - Xb
Xs
# [1] 54 51 46 39 30 19 6 -9 -26 -45