2013-04-07 25 views
1

我想编写一个函数来比较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

当i = length(x)'时,'i + 1'会发生什么? – 2013-04-07 19:46:41

回答

10

我宁愿矢量化的功能,例如这样:

diffx <- diff(x) 
diffy <- diff(y) 
sum(sign(diffx)==sign(diffy))/length(diffx) 
+1

谢谢你的回答。很有帮助。这种方式好多了! – George 2013-04-08 05:11:21

1

for循环在length(x)结束,那么你有y[i+1]不包含值。您应该结束length(x-1)的循环。

+0

谢谢你的回答。我尝试了长度(x)-1,但我有同样的错误。用juba提出的diff函数解决了问题 – George 2013-04-08 05:13:49

相关问题