我想编写一个函数来比较R中两个向量的增量。函数返回两个向量一起增加或减少的次数的百分比。
我编写了以下函数,并使用向量进行了测试:
x=c(1,3,5,6,7)
y=c(1,5,6,8,7)
结果应该是0.75但是当我调用correl(x,y)
时出现错误
Error in if ...missing value where TRUE/FALSE needed
任何帮助?
correl<-function(x,y){
count = c()
for (i in 1:length(x))
if((((y[i+1]-y[i]) > 0) && ((x[i+1]-x[i]) > 0)) || (((y[i+1]-y[i]) < 0) && ((x[i+1]-x[i]) < 0)))
count <- union(count, c(i))
print(length(count) / length(x)-1)
}
答案 0 :(得分:10)
我宁愿对函数进行矢量化,例如这样:
diffx <- diff(x)
diffy <- diff(y)
sum(sign(diffx)==sign(diffy)) / length(diffx)
答案 1 :(得分:1)
您的for
循环在length(x)
结束,然后您y[i+1]
不包含值。你应该在length(x-1)
上结束循环。