R范围:1:0-不合逻辑的行为

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一样抛出异常)当它的第二个参数低于第一个参数时,求和函数将完成其余的工作。有人知道吗,或

我有一个长度为N的数组X,我想计算
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