2014-02-19 4 views
1

부분적으로 메모리 사용을 제한하고 싶기 때문에 정수 값을 가진 래스터를 만들고 싶습니다. R에서 패키지 래스터를 사용하고 있습니다. 정수 값을 가진 래스터를 만들 수있는 것처럼 보이지만 추출 된 값은 숫자입니다. 다음은 간단한 예입니다.정수 값이있는 래스터 R

library(raster) 
# Create an empty raster 
r <- raster(nrow=10,ncol=10) 
# fill it with integer values 
r[] <- 1:100 
# It look like it's a integer raster 
class(r[]) 
# but when you extract a value it's a numeric 
class(r[1]) 
# if you extract it this way you get an integer 
class(r[][1]) 
# But that's not always practical 

누군가가이 경우 이유를 설명 할 수 있을까 어떻게 내가 r[1]을 사용할 때 정수 값을 반환하는 래스터를받을 수 있나요?

정수 값과 관련된 항목을 찾을 수 없습니다. 범주 형 변수를 설명하는 a post이 있습니다. 그러나 범주 형 변수는 정수보다 많은 메모리를 사용합니다.

object.size(r) 
object.size(ratify(r)) 

많은 감사! 마리

답변

1

는 잘 모르겠어요 이유이 경우이지만, 일반적인 규칙은 지수 자체가 클래스 숫자의 때마다 래스터 숫자 값에 정수 값을 변환 것으로 나타납니다. 반환 값이 "numeric"으로 변환되지 않도록하려면 "integer" 클래스의 인덱스 만 사용해야합니다.

library(raster) 
# Create an empty raster 
r <- raster(nrow=10,ncol=10) 
# fill it with integer values 
r[] <- 1:100 

class(1) 
# [1] "numeric" 
class(r[1]) 
# [1] "numeric" 

class(1L) 
# [1] "integer" 
class(r[1L]) 
# [1] "integer" 

class(1:2) 
# [1] "integer" 
class(r[1:2]) 
# [1] "integer" 

class(1.7) 
# [1] "numeric" 
class(r[1.7]) 
# [1] "numeric" 

class(r[as.integer(1.7)]) 
# [1] "integer" 
class(r[as.integer(1.7)]) 
# [1] "integer" 
+0

이 아주 잘 내 원래의 질문에 대한 대답, 감사합니다. 그러나 이제는 [행, 열]을 사용하면 숫자가 다시 나타납니다. 참조 :'class (r [1L, 1L])'. [셀] 인덱싱 대신 [row, col] 인덱싱을 사용하면 다른 클래스가 생성되는 이유는 무엇입니까? [행, 셀] 인덱싱을 사용하여 정수를 가져 오는 방법이 있습니까? –

+1

@ MarieAuger-Methe - as.matrix (r) [1L, 1L] 또는 as (r [1,1], class (getValues ​​(r, 1))와 같은 작업을 수행해야하는 것처럼 보입니다.) '를 호출하여 결과가 래스터의 요소와 동일한 유형인지 확인합니다. 'showMethods ("[[]'')를 수행하고 getMethod ("[ ","숫자 ","누락 "))'및'getMethod ("[ ", c (" "Raster", "숫자", "숫자"))'. 후자는'cellFromRowColCombine (r, 1L, 1L)'에서와 같이'cellFromRowColCombine()'을 호출하는데, 항상 정수 값을 반환합니다. 래스터 ::: doExtract()','.cellValues ​​()','.readCells' –

+0

그리고 그 이후에 토끼 구멍을 계속 따라 가면''숫자 ''로의 초기 변환은 필연적으로 반환 된 결과. –

0

일반적으로, 올바른 클래스를 반환하는, getValues()를 사용해야합니다. 귀하의 경우 :

class(getValues(r)) 

이제 []에 무슨 일이 일어나고 있는지 이해하기, index.R에 소스 코드를 보면 :

  1. setMethod("[", c("Raster", "missing", "missing")는 올바른 결과를 반환, 내부 getValues()를 사용합니다.

  2. setMethod("[", c("Raster", "numeric", "missing"), : 내부적으로 raster:::.doExtract을 사용하며 raster:::.readCells()을 호출합니다. 마지막 함수는 cbind(uniquecells, vals)에 대한 호출을 포함하여 매트릭스를 만듭니다. R의 행렬은 하나의 유형 만 가질 수 있습니다. 따라서, 의 값이 인 경우에도, 의 유니크 셀은 정수가 될 수 있습니다. 당신이 r[]을 사용하는 경우

그래서, 당신은 당신이 r[1]을 수행 할 때, 당신이 경우에있는 동안, 경우 (1)에 있던 2

관련 문제