나는 (완전히 놀랍도록) data.table
패키지에 새로운 것이므로 매우 기본적인, 다소 기괴한 문제에 봉착 한 것처럼 보입니다. 내가 일하는 정확한 데이터 세트를 게시 할 수는 없지만 사과해야합니다. 문제는 분명히 분명히 밝혀 질만큼 간단하다고 생각합니다.변수를 매개 변수로 data.table에 전달하는 방법 [J()]
의 내가 키 X와, 그래서 같은 data.table 있다고 가정 해 봅시다 :
set1
x y
1: 1 a
2: 1 b
3: 1 c
4: 2 a
나는 x == 1
모든 행을 포함 set1
의 하위 집합을 반환합니다. 이것은 data.table에서 놀라 울 정도로 단순합니다 : set1[J(1)]
. Bam. 끝난. z <- 1
을 할당하고 set1[J(z)]
으로 전화 할 수도 있습니다. 다시 : 훌륭한 작품.
... ~ 6M 행을 포함하는 실제 데이터 세트까지 확장하려고 할 때를 제외하고. 내가 set1[J(1674)]
라고 부를 때, 나는 정확히 내가 무엇을 찾고 있는지를 78 줄로 돌려 준다. 그러나 나는 (문자 그대로)이 부분 집합 중 4M을 찾을 수 있어야합니다. 검색 할 값을 id <- 1674
으로 지정하고 set1[J(id)]
... R을 호출하면 거의 내 바탕 화면이 다운됩니다.
분명히 무언가 나는 data.table 후드에서 계속 진행되고 있지만 이해할 수 없었습니다. 인터넷 검색 및 스택 오버플로를 통해 이것이 작동해야 함을 제안합니다. 순수한 whimsey에서, 나는 시도했다 :
id <- quote(1674)
set1[J(eval(id))]
... 그러나 그것은 훨씬 더 나쁘다. 뭐 ... 무슨 일이야?
R이 출력하는 내용에 대해 좀 더 자세히 설명해 주시겠습니까? –
예 아니요. 예, 자세한 내용을 제공 할 수는 있지만 R은 아무 것도 인쇄하지 않습니다 *. 'top'에 따르면 set1 [J (id)]를 호출하면 rsession이 시스템 메모리를 최대 97 %까지 사용하기 시작합니다. 이 상자는 나중에 rsession 프로세스를 죽일 때까지 기능적으로 사용할 수 없게됩니다. 이것은'set1 [J (1674)]와는 대조적으로'enter '를 누르면 78 행을 반환합니다. – Gastove
id는 데이터 테이블의 열입니다. – mnel