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)
}
4

2 回答 2

10

我宁愿对函数进行矢量化,例如这样:

diffx <- diff(x)
diffy <- diff(y)
sum(sign(diffx)==sign(diffy)) / length(diffx)
于 2013-04-07T19:49:30.687 回答
1

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

于 2013-04-07T19:51:15.650 回答