2014-09-09 2 views
0

testi에는 0을 비롯한 숫자 값이 들어있는 테이블이 있습니다. 열에서 로그 변환을 수행하여 "-Inf"문자열을 생성하려고합니다. shapiro.test 결과적으로 로그 변환 후 문자가 포함 된 모든 열에 대해 "NA"가됩니다.개체의 숫자 값만 사용

그러나 해당 열에서 숫자 값만 추출하고 이후에 shapiro.test를 수행 할 수 있습니까? 어쩌면 나는 "-Inf"를 아무것도 대체 할 수 없습니까?

도움 주셔서 감사합니다.

test <- log(x) 
test 
[1] -Inf -7.562929 -7.424757 -6.284397 -6.637388 -8.141037 -5.371136 -7.093784 -6.489694 -6.529703 
[11] -7.282913 -7.075025 -7.711110 -9.352510 -6.580074 -6.530339 -5.549224 -7.347854 -4.088114 -Inf (rest omitted) 

str(test) 
num [1:60] -7.32 -7.56 -7.42 -6.28 -6.64 ... 

shapiro.test(test) 

    Shapiro-Wilk normality test 

data: test 
W = NaN, p-value = NA 
+0

아니요, 단순히 '-Inf'를 제거하면 안됩니다. 그것들은 원래 데이터의 정확한 0입니다. 예를 들어'sqrt (x)'또는'log (x + 1)'과 같은 다른 변환을 시도해 볼 수 있습니다. 그러나 정상적인 테스트를 사용하는 이유는 조금 회의적입니다. – Roland

+0

나는 정규 분포를 가정하는 공간 변동 모델 피팅을 수행한다. 정규성을 얻기 위해 sqrt, 로그 및 제곱 변형을 수행합니다. 하지만 당신 말이 맞아요, 나는 처음부터 로그 (x + 1)와 함께 갔어야합니다. 나는 여전히 R과 관련된 근본적인 질문에 관심이있다 ("혼합 된 객체에서 특정 데이터 유형을 추출하는 방법"). – nouse

+0

값이 작기 때문에'log1p'를 사용하는 것이 좋습니다. – James

답변

2

is.finite() 함수를 사용하여 모든 유한 값을 갖는 부분 집합을 추출 할 수 있습니다.

a = c(pi/0, 3,4,5,2,3) 
a 
[1] Inf 3 4 5 2 3 
a = a[is.finite(a)] 
a 
[1] 3 4 5 2 3 
1

에서 Inf은 숫자이며 문자열이 아닙니다. 가장 큰 배정도 수를 나타냅니다.

test[is.finite(test)] 

은 물론 이것은 단지 무한한를 제거합니다, 그러나 당신이 만든다 무엇을하고 있다는 것을 보장하지 않습니다 : 당신이 벡터에서 무한 값을 제거하려는 경우, 당신은 예를 들어, is.finite 기능을 시도 할 수 있습니다 감각.

관련 문제