ggpairs()
은 조부모 인 scatterplotMatrix()
과 마찬가지로 쌍 수가 늘어남에 따라 속도가 매우 느립니다. 공정 해; 쌍들의 순열의 수는 요인에 따라 증가한다.매트릭스 플롯을 가속하는 방법이 있습니까?
내 머신의 다른 코어가 유휴 상태에있는 것을보아야한다는 것은 불만족 스럽습니다.
큰 매트릭스 플롯을 병렬 처리하는 방법이 있습니까?
다음은 벤치마킹을위한 샘플 데이터입니다. print()
문을 제외한
num.vars <- 100
num.rows <- 50000
require(GGally)
require(data.table)
tmp <- data.table(replicate(num.vars, runif(num.rows)),
class = as.factor(sample(0:1,size=num.rows, replace=TRUE)))
system.time({
tmp.plot <- ggpairs(data=tmp, diag=list(continuous="density"), columns=1:num.vars,
colour="class", axisLabels="show")
print(tmp.plot)})
흥미롭게도, 내 초기 벤치 마크 허용 속도 (위의 21 분)에 달렸다. 추가 된 print 문은 내 컴퓨터에서 segfaults로 보이는 것을 발생 시켰습니다. (R 세션이 OS에 의해 간단하게 종료되기 때문에 지금은 말하기가 어렵습니다.)
메모리에 문제가 있습니까? 아니면 병렬 처리 할 수있는 것이 있습니까? (적어도 플롯 생성 부분은 병렬 의무가 보인다.) GGally:::print.ggpairs
내 작품의 대부분은 (당신이 라인을 계산하는 방법에 따라, 어딘가에 라인 (50)의 주위에) 두 개의 for 루프 내부에서 발생하기 때문에 ggpairs
플롯을 그리기
결과 플롯이 의미있는 것으로 생각 했습니까? 또한, 이런 식으로'replicate'을 사용해서는 안됩니다 (이것은 R 루프입니다). 'matrix (runif (num.vars * num.rows), ncol = num.vars)'와 같은 것을 사용하십시오. '인쇄'는 실제 그리기 (즉, 그래픽 오브젝트의 평가/렌더링)를 야기하는데, 이는 그렇지 않은 경우 그리드 그래픽을위한 기능들 내에서 수행되지 않는다. – Roland
웁스! 당신 말이 맞아요, 복제는 벤치 마크에 있지 않아야합니다. 작업을 해체하기 위해 특별히'print' 문을 추가했지만, 내가 묻는 방식이 명확하지 않습니까? (결과 플롯은 적절하게 스케일 된 경우 합리적인 것입니다.) 이런 종류의 간단한 청킹 함수가 좋을지라도 - 어딘가에 재 작성이 필요한 곳이 있습니다.) –
병렬 처리가 약간 도움이 될 수 있지만 원하는 경우 심각한 개선이라면 더 열심히 일하지 않고 더 똑똑하게 일하는 더 좋은 방법 일 수 있습니다. 나는 해결책을 줄 수는 없지만 아마도 [이 MATLAB 솔루션] (http://www.mathworks.nl/matlabcentral/fileexchange/40790-plot-big)이 영감의 원천이 될 수 있습니다. –