2014-06-17 2 views
0

quantile 위 또는 아래에있는 데이터 프레임 내에서 "truncate"하고 싶습니다.Quantile 함수 오류

행렬 인 "TRUNC"와 같은 뭔가 :

Fehler in if (na.rm) x <- x[!is.na(x)] else if (any(is.na(x))) 
stop("missing values and NaN's not allowed if 'na.rm' is FALSE") : 
Argument kann nicht als logischer Wert interpretiert werden 
Zusätzlich: Warnmeldung: 
In if (na.rm) x <- x[!is.na(x)] else if (any(is.na(x))) 
stop("missing values and NaN's not allowed if 'na.rm' is FALSE") : 
Bedingung hat Länge > 1 und nur das erste Element wird benutzt 

그래서 나는 간단한 예를 시도 : 나는 그런 식으로 모든 시간을 오류 메시지를받을

for (i in 1 : ncol (TRUNC)) { 
for (j in 1 : nrow (TRUNC)) { 
if ((TRUNC[i,j] > quantile(TRUNC,probs=0.995,na.rm=T)) || (TRUNC[i,j] < 
quantile(TRUNC,probs=0.005,na.rm=T))) { 
TRUNC[i,j] = NA } } } 

그러나

A=matrix(seq(1,8),nrow=4) 
A[2,2]=NA 
quantile(A,probs=0.5) 

또한 나에게도 같은 오류가 발생합니다. 나는이 같은 시도

하더라도 :

B=as.vector(A) 
quantile(B,na.rm=T) 

를 작동하지 않습니다!

누군가 내게 해결책을 설명 할 수 있다면 매우 감사 할 것입니다!

내 코드가 잘못되었습니다. na.rm = T가 데이터 세트 내에서 NA의 문제를 해결하기로되어 있지 않습니까?

+0

나는 정말로 이유를 모른다. 그러나이 경우, R은 na.rm = T를 인식하지 못할 것이다! 방금 na.rm = TRUE로 작동한다는 것을 알았습니다 !!! T와 TRUE 사이에 차이가 있습니까? 나는 지금까지 항상 "T"를 사용했다. – path

+1

스크립트의 어느 단계에서나 위의 단계에서 정의 된 변수'T'가 있습니까? 'na.rm = T' 대신'na.rm = TRUE'로 설정을 시도해 볼 수 있습니까? – asb

+0

'rm (T)'를 실행 해보고 다시 실행하십시오 –

답변

1

음 ... quantile으로 전화 할 때 na.rm=TRUE을 사용하십시오. 문제는 아마도 T 변수가 FALSE으로 평가되는 다른 것으로 정의 된 것입니다. 이것은 나를 위해 여기에서 작동한다 :

A=matrix(seq(1,8),nrow=4) 
A[2,2]=NA 
quantile(A,probs=0.5, na.rm=TRUE) 
+0

고마워요, asb! 1 초 전, 나 혼자서 알아 냈어! (위의 설명 참조),하지만 난 왜 모르겠어요 ... – path

+0

확실하지 왜 downvote. 'na.rm = T'를'na.rm = TRUE'로 변경하면 이것은 유효한 대답입니다. – asb

+0

... 방금 답을 수정했습니다. 전에 실제 문제를 해결하지 않았다. –