2016-12-22 4 views
0

이 문제는 몇 번이나 발생했습니다. 함수 내에 ifelse 문을 배치하면 항상 동일한 결과가 발생합니다.Ifelse가 함수 내에서 작동하지 않습니다.

Data$QuarterHour <- ifelse(Data$Minute < 15, return(1), 
            ifelse(Data$Minute < 30 , return(2), 
              ifelse(DataFrame$Minute < 45, return(3), return(4)))) 

이것은 완벽하게 작동합니다. 그러나, 그것을 함수에 넣을 때. 그렇지 않습니다.

calculateHourQuarter <- function(aMinute) 
{ 
ifelse(aMinute < 15, return(1), 
     ifelse(aMinute < 30 , return(2), 
       ifelse(aMinute < 45, return(3), return(4)))) 
} 

DataFrame$QuarterHour <- calculateHourQuarter(as.numeric(Data$Minute)) 

결과로 열이 1로 채워집니다. 콘솔에서 함수를 대화식으로 호출하면 정수를 콘솔에서 전달할 때 올바른 결과를 얻을 수 있습니다.

아이디어가 있으십니까?

감사합니다.

답변

7

R 절에서 return 문을 제거하십시오. R 함수는 return을 충족하면 종료됩니다.

또한 ifelsereturn 문을 사용하지 않고 만을 반환합니다. 다시 ?ifelse을 읽으십시오.

x <- c(6:-4) 
sqrt(ifelse(x >= 0, x, NA)) 

오른쪽에는 return 없습니다 : ifelse에 대한 첫 번째 예는 일을 당신에게 올바른 방법을 보여주고있다?


마지막으로, ifelse 정말 (당신이 할 수 있지만) 중첩을 위해 설계되지 않았습니다. 대신 cut 또는 findInterval 사용 (후자에 더 적합한 다음은 정수 결과를 원하는 당신의 필요) :

findInterval(aMinute, c(0, 15, 30, 45, 60)) 
+0

은 또한 각 조건이 보이기 때문에 그들이 여기 원하는 어쩌면 무엇 인 else'''if'을 언급하고 수 길이는 1이다. 오, 신경 쓰지 마세요, 그들은 벡터와 함께 일하고있는 것 같아요. – Frank

+0

ifelse에는 매우 특이한 (그리고 종종 유용한) 기능이 있습니다. 최종 결과는 부울 문과 동일한 차원을가집니다. 위의 경우 대신에'ifelse (TRUE, x, NA)'가'6 : -4'이 아닌 6을 반환하면 어색한 결과가 나올 수 있습니다. – Shape

+0

이것은 정말 대단합니다! – Foxhound

관련 문제