[英]R function for finding sum of intervals in a vector mysteriously returns numeric(0), but works fine manually
我制作了以下函数来查找排序数字向量中所有间隔的总和:
sum.intervals <- function(x){
x <- sort(x)
acc <- 0
for( i in 1:length(x) - 1 ){
acc <- acc + x[i + 1] - x[i]
}
return(acc)
}
尝试使用它时,我期望一个标量值,但得到numeric(0)
:
x <- c(5, 2, 7, 3)
y <- sum.intervals(x)
y
#numeric(0)
但是,当手动执行迭代时,这个想法工作正常:
x <- sort(x)
acc <- 0
i <- 1
acc <- acc + x[i + 1] - x[i]
i <- 2
acc <- acc + x[i + 1] - x[i]
i <- 3
acc <- acc + x[i + 1] - x[i]
acc
#5
函数有什么问题?
1:length(x) - 1
应该是1:(length(x) - 1)
。 您正在从向量中的每个元素中减去 1。
你真的需要一个循环吗? 做就是了:
sum(diff(sort(x)))
我们也可以在没有循环的情况下做到这一点
sum( x[-1] - x[-length(x)])
#[1] 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.