2013-07-25 2 views
3

64 비트 Windows에서 64 비트 R을 사용하고 있습니다. 문 다음 실행 때64 비트 Windows에서 ff 객체 길이가 32 비트 정수로 제한됩니다.

fi <- ff(vmode="integer", length=2147483648) 

R은

length must be between 1 and .Machine$integer.max

이이 제한을 피하기 위해 어떤 방법이 있나요 64 비트 R. 좋은 이해가되지 않습니다라는 오류 메시지가 생성?

+1

R의 (지정되지 않은) 64 비트 버전에서 .Machine $ integer.max를보십시오 (항상 그렇게되었을 것입니다). R 3.0+는 더 긴 53 비트 인덱스 (숫자 가수의 길이)를 허용하므로 ff의 작성자가 코드에서 아직 테스트를 변경하지 않았을 가능성이 있습니다. –

+1

http://google-opensource.blogspot.ca/2011/11/bringing-64bit-data-to-r.html –

+0

어떤 R 버전을 사용하고 있습니까? > = R 3.0.0? –

답변

3

패키지 소스를 변경/다시 컴파일하여이 문제를 해결했습니다.

ff에서 많은 기능 중에서 ff 개체를 만들고 get/set 하위 스크립트 메서드를 호출하여 범위가 좁아서 밤에이 작업을 수행 할 수 있었지만 모든 크레딧은 구성한 원래 작성자에게만 돌아갔다. 근원. 사실, 저자는이 문제에 대해 잘 준비했고 다양한 종류의 색인 및 크기에 대해 C 매크로를 만들었습니다. 방금 C 매크로를 사용하여 원하는 것을했습니다.

대략 내가 한 일입니다. C 함수 new로 크기와 페이지 크기를 전달할 때

  1. 는 as.integer 대신 FF 함수
  2. 사용 as.double을 FF 객체의 크기 (길이)에 대한 모든 에러 체크 정수를 제거한다. ff.h에서
  3. , 난

    r_ff.c의 r_ff_new 방법
    #define FF_DECL_TYPE(NAME,TYPE) \ 
        FF_DECL_TYPE2(NAME,TYPE,int,int) \ 
        FF_DECL_TYPE2(NAME##_d,TYPE,double,double) 
    
  4. * _d_new 모든 * _new 기능을 대체 사용 asReal 대신 매크로 ff.cpp의 해당 부분에 따라 재정의 렌에 대한 asInteger 및 페이지 크기

내가 할 수 있지만, 내 초기 테스트에서, 내가 위에서 내 질문에 문을 실행할 수 및/R. 내에서 배열의 요소를 설정 얻을 수있는 많은 것들이 확신 객체는 R을 떠나지 않고 예를 들어 30GB 데이터 큐브를 전처리하고 분석하는 것입니다. 그리고 나는이 근처에있다.

+1

니스! ff 패키지에 포함 된 경우 좋을 것입니다! – jwijffels

+0

@jwijffels 내 변화가 거의 완료되지 않았지만 기회가 있으면 기꺼이 기여할 의향이 있습니다. 이 변경을 완료하면 (테스트/디버그) 저자에게 연락을 시도합니다. –

관련 문제