2012-09-26 5 views
6

이 질문은 아마도 이전에 대답되었을 지 모르지만 나는 대답을 찾지 못했습니다.R : 정수 대 숫자

숫자와 누락 된 값으로 구성된 데이터 세트가 있습니다. 한 행은 백분율입니다. 다음은 AA, BB 및 CC가 열 이름 인 작은 가짜 데이터 집합입니다. 이 데이터 세트의 세 번째 행은 백분율입니다. 내가 데이터 세트 AA와 CC를 읽을 때이 경우

AA BB CC 
    234 432 78 
1980 3452 2323 
91.1 90 93.3 
    34 123 45 

는 숫자이며, BB는 정수입니다. 90.0이 90으로 반올림되었다고 생각합니다. BB가 숫자라는 것을 지정하지 않으면 기본 산술에 문제가 발생할 수 있습니까?

dd = 1 및 ee = 2이고 둘 다 정수인 경우 C 언어는 dd/ee = 0이라고 말하고 R은 dd/ee = 0.5라고 말합니다.

다음은 데이터가 숫자인지 정수인지에 관계없이 R에서 답안을 제시하는 모든 일련의 간단한 수학 연산입니다. 그럼에도 불구하고 데이터를 읽을 때 모든 변수가 숫자임을 지정하는 것이 현명하다고 생각합니다. Google을 사용하여 데이터 유형이 차이를 만드는 것처럼 보이지만 아래에서는 보이지 않는 예를 발견했습니다.

aa <- c(1,2,3,4,5,6,7) 
bb <- 2 
str(aa) 
str(bb) 

cc <- as.integer(aa) 
dd <- as.integer(bb) 
str(cc) 
str(dd) 

aa/bb 
cc/dd 
aa/dd 
cc/bb 

ee <- aa * aa 
str(ee) 
sum(ee/2) 

ff <- cc * cc 
str(ff) 
sum(ff/2) 

gg <- 4.14 

hh <- ((aa * aa) * gg)/2 
hh 
ii <- ((cc * cc) * gg)/2 
ii 

jj <- (aa * aa)/gg 
jj 
kk <- (cc * cc)/gg 
kk 
jj == kk 

mm <- as.integer(1) 
nn <- as.integer(2) 
mm/nn 

나는 이것이 단순한 수학에서는 문제가되지 않을 것이라는 확신을 주길 바란다. 나는 여기서 프로그래밍의 근본적인 규칙이 있다고 생각하지만, 그것이 무엇인지는 확실하지 않다. (I 배정 밀도의 개념을 알고 있습니다.) 반드시 기본적인 문제가 무엇인지 어떤 조언을

감사합니다. / 연산자를 사용

답변

7

부는 항상 "더블"는 C의 "숫자", 즉 동등 반환한다. 분자와 분모는 먼저 숫자로 강제 변환 된 다음 나누기가 완료됩니다. 정수 나누기를 사용하려면 %/%을 사용할 수 있습니다. 정수를 만들려면 trunc 또는 floor을 사용하거나 round(x , 0)을 사용하거나 as.integer를 사용할 수 있습니다. 그 옵션의 첫 번째 두 번째 및 네 번째는 동등합니다. 인쇄 된 표현이 정수로 표시 되더라도 라운드 함수는 여전히 "숫자"를 반환합니다. 난 당신만큼 당신이 "더블"/ "숫자"결과에 만족하실 것으로 고민 할 필요가 있다고 생각하지 않습니다. 지옥, 우리는 심지어 정수의 무리로 입력에도 불구 부문은 0

하여 'AA'변수 '숫자'로 분류 된 수 있습니다하지만 당신은 사용했다 :

aa <- 1:8 # sequences are integer class. 

그것은 당신 것처럼 소리 너무 놀라지 말것. FAQ 7.31