수색…


숫자

숫자는 정수와 복식을 나타내며 숫자 벡터에 지정된 기본 모드입니다. is.numeric() 함수는 벡터가 숫자인지 여부를 평가합니다. 정수와 복식이 통과 되더라도 것이 중요합니다 is.numeric() , 함수 as.numeric() 항상 이중 입력 변환을 시도합니다.

x <- 12.3
y <- 12L

#confirm types
typeof(x)
[1] "double"
typeof(y)
[1] "integer"

# confirm both numeric
is.numeric(x)
[1] TRUE
is.numeric(y)
[1] TRUE

# logical to numeric
as.numeric(TRUE)
[1] 1

# While TRUE == 1, it is a double and not an integer
is.integer(as.numeric(TRUE))
[1] FALSE

Doubles 는 R의 기본 숫자 값입니다. 이것들은 배정 밀도 벡터이므로 벡터의 각 값에 대해 8 바이트의 메모리를 차지합니다. R에는 단 정밀도 데이터 유형이 없으므로 모든 실수는 배정도 형식으로 저장됩니다.

is.double(1)
TRUE
is.double(1.0)
TRUE
is.double(1L)
FALSE

정수 는 분수 구성 요소없이 작성할 수있는 정수 입니다. 정수는 그 뒤에 L이 붙은 숫자로 표시됩니다. L이없는 숫자는 이중으로 간주됩니다.

typeof(1)
[1] "double"
class(1)
[1] "numeric"
typeof(1L)
[1] "integer"
class(1L)
[1] "integer"

정수 나 double을 사용하는 대부분의 경우에는 문제가되지 않지만 때때로 double을 정수로 바꾸면 메모리와 작동 시간이 줄어 듭니다. 이중 벡터는 요소 당 8 바이트를 사용하지만 정수 벡터는 요소 당 4 바이트만을 사용합니다. 벡터의 크기가 커지면 적절한 유형을 사용하면 프로세스가 크게 빨라질 수 있습니다.

#  test speed on lots of arithmetic
microbenchmark(
  for( i in 1:100000){
  2L * i
  10L + i
},

for( i in 1:100000){
  2.0 * i
  10.0 + i
}
)
Unit: milliseconds
                                          expr      min       lq     mean   median       uq      max neval
 for (i in 1:1e+05) {     2L * i     10L + i } 40.74775 42.34747 50.70543 42.99120 65.46864 94.11804   100
   for (i in 1:1e+05) {     2 * i     10 + i } 41.07807 42.38358 53.52588 44.26364 65.84971 83.00456   100


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow