R中的If语句

R中的If语句,r,if-statement,R,If Statement,我无法对对象进行IF比较。当我将它们与数值进行比较时,IF工作,例如:IF(c1

我无法对对象进行IF比较。当我将它们与数值进行比较时,IF工作,例如:
IF(c1
失败
IF(c1<0){do something}
工作

这是我正在使用的代码,它显示错误,
HighValues
是一个数字列表,
LowValue
也是一个数字列表。我做的比较错了吗

checkHS<-function(HighValues,LowValues)
{
  counter<-1
  patternList<-c()

  while(counter < length(HighValues))
  {
     cmpValue1<- 0.15*HighValues[[counter]]
     cmpValue2<- HighValues[[counter+1]]
     if(cmpValue1<cmpValue2) 
     patternList<-c(patternList,counter)
     counter<-counter+1

  }
  return (patternList)
}

checkHS当我使用您提供的数据运行函数时,它会毫无怨言地计算完成,只返回它应该返回的值:

head(checkHS(HighValues=HighValues, LowValues=LowValues))
[1] 1 2 3 4 5 6
也就是说,下面的代码与您发布的函数的作用相同。它利用了R的“矢量化”计算能力,生成了更具表现力、更易于阅读的代码

checkHS2 <- function(HighValues,LowValues) {
    cmpValue1 <- 0.15*HighValues[-length(HighValues)]
    cmpValue2 <- HighValues[-1]
    which(cmpValue1 < cmpValue2)
}

checkHS2当我使用您提供的数据运行函数时,它会毫无怨言地计算完成,只返回它应该返回的值:

head(checkHS(HighValues=HighValues, LowValues=LowValues))
[1] 1 2 3 4 5 6
也就是说,下面的代码与您发布的函数的作用相同。它利用了R的“矢量化”计算能力,生成了更具表现力、更易于阅读的代码

checkHS2 <- function(HighValues,LowValues) {
    cmpValue1 <- 0.15*HighValues[-length(HighValues)]
    cmpValue2 <- HighValues[-1]
    which(cmpValue1 < cmpValue2)
}

checkHS2回答你问题的关键是:“你期望结果是什么?”


当我运行您的代码时,我没有发现其中有任何错误,函数正在返回值。

回答您问题的关键是:“您希望得到什么结果?”


当我运行您的代码时,我没有发现代码中有任何错误,函数正在返回值。

HighValues对象的类型是什么?你为什么要传递低值呢?您希望计数器有条件地递增还是每次递增?代码很不清楚。。。在意图方面。顺便说一句,你的例子行应该很好。。。你说“不行”是什么意思?如果您将c1和c2设置为某个值,那么这些行将执行它们应该执行的操作。一旦你更好地解决了这个问题,你应该会得到一些很好的反应,R代码看起来和你的代码完全不同。您这样做的方式效率很低,而且与un-R类似。HighValues对象属于列表类型,计数器每次递增,与条件无关,LowValues是第二个If条件,我没有在这里添加条件,上面的代码生成**True/False not found Error**。我确实试着设置c1和c2,但就是不起作用。我仍然想知道为什么。你能发布一个你传递给函数的数据类型的小例子吗?@JoshO'Brien-我已经添加了数据集。请检查。仅供参考,您添加的高值和低值数据是矢量,而不是列表。我这样问是因为你的索引就像列表一样,这表明所有数据可能不是同一类型的。如果只是数字和列表,则首先将其设置为向量(
unlist()
it),这样可以确保使用的是正确的数据类型。HighValues对象的类型是什么?你为什么要传递低值呢?您希望计数器有条件地递增还是每次递增?代码很不清楚。。。在意图方面。顺便说一句,你的例子行应该很好。。。你说“不行”是什么意思?如果您将c1和c2设置为某个值,那么这些行将执行它们应该执行的操作。一旦你更好地解决了这个问题,你应该会得到一些很好的反应,R代码看起来和你的代码完全不同。您这样做的方式效率很低,而且与un-R类似。HighValues对象属于列表类型,计数器每次递增,与条件无关,LowValues是第二个If条件,我没有在这里添加条件,上面的代码生成**True/False not found Error**。我确实试着设置c1和c2,但就是不起作用。我仍然想知道为什么。你能发布一个你传递给函数的数据类型的小例子吗?@JoshO'Brien-我已经添加了数据集。请检查。仅供参考,您添加的高值和低值数据是矢量,而不是列表。我这样问是因为你的索引就像列表一样,这表明所有数据可能不是同一类型的。如果只是数字和列表,则首先将其设置为向量(
unlist()
it),这样您就可以确保使用的是正确的数据类型。谢谢,伙计,找到了一个解决方法,尽管使用了该方法,但逻辑的使用明确地说明了这一点。再次感谢。谢谢你,老兄,想出了一个解决办法,力的使用,但肯定是逻辑的使用让它变得清晰。再次感谢。它返回true/false预期。它返回true/false预期。