2012-03-26 15 views
1

네트워크를 통해 효율적으로 R 데이터를 검색 할 수 있어야합니다. 검색하려고하는 일반적인 데이터 세트는 수십만 개의 숫자로 구성됩니다.정확도가 낮은 숫자 데이터

현재 데이터를 저장하기 위해 saveRDS를 사용하고 있습니다. 데이터를 검색하기 위해 readRDS를 사용하고 있는데, 이는 저에게 훌륭한 성능을 제공합니다. 그러나 사전 계산 된 결과 중 일부는 R이 각 숫자를 4 바이트로 저장하기 때문에 수십 MB 범위에서 끝날 수 있습니다. 내 응용 프로그램의 경우 1 또는 최대 2 바이트 정수 이상의 정확성이 필요하지 않으므로 이진 데이터를 다른 형식으로 저장하여 시간을 절약 할 수 있다고 생각합니다.

축소 된 정밀도 형식으로 R 데이터를 효율적으로 저장하는 방법에 대해 온라인으로 찾을 수 없었습니다. 분명히 필자는 자신의 바이너리 형식으로 읽고 쓸 수 있지만 R에서 수행하는 루프의 오버 헤드가 네트워크를 통해 읽기/전송 시간을 줄임으로써 얻을 수있는 성능상의 이점보다 훨씬 클 것이라고 생각합니다.

누구나이 경험이 있습니까?

답변

2

이와 같은 문제를 해결하기 위해 pack 패키지를 작성하기 시작했습니다. 나는 now-defunct service에 대한 API 인 다른 패키지를 지원하기 위해 그것을 사용하고있었습니다.

1 바이트 정수 (< 256)를 원할 경우 as.raw을 사용하여 결과를 보낼 수 있습니다. 데이터를 수신하는 기기에서 as.integer을 사용하십시오.

> as.raw(255) 
[1] ff 
> as.integer(as.raw(255)) 
[1] 255 

2 바이트 정수의 경우 pack을 사용하여 결과를 보낼 수 있습니다. 그런 다음 데이터를 수신하는 기기에서 unpack을 사용하십시오.

> library(pack) 
> pack("v", 255) 
[1] ff 00 
> pack("v", 256) 
[1] 00 01 
> unpack("v", as.raw(255)) 
[[1]] 
[1] 255 

나는 그것을 사용한 적이 없으니까,하지만 난 RProtoBuf에 대해 좋은 것들을 들었습니다.

+0

고마워요! 'as.raw'는 나에게 충분한 정확성이 아니었지만 패키지의'short' int는 그 트릭을 할 수 있습니다! –

관련 문제