Если заявление в R - PullRequest
       8

Если заявление в R

2 голосов
/ 03 января 2012

Я не могу сделать IF сравнение объектов. Когда я сравниваю их с числовыми значениями, IF работает, например: if (c1 < c2){do something} не работает 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)
}

Что я делаю не так?

Редактировать: Добавление набора данных, который я передаю в функцию для большей ясности.

HighValues<-c(1:100)</p> <p>LowValues<-c(2:101)

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Когда я запускаю функцию с предоставленными вами данными, она завершает работу без жалоб, возвращая только те значения, которые должны:

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)
}
0 голосов
/ 03 января 2012

ключ к ответу на ваш вопрос: «Чего вы ожидаете в результате?»

Когда я запустил ваш код, я не обнаружил в нем никакой ошибки, функция возвращает значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...