2011-12-03 5 views
12

플로팅 속도를 높이고 싶습니다. R 그래픽과 ggplot 패키지가 만족 스럽습니다 (그리고 많은 코드가 필요합니다). 그래서 필자의 시스템을 구성하여 플로팅 속도를 높이는 방법을 알고 싶습니다.R에서 플로팅 속도를 나타내는 하드웨어 제한은 무엇입니까?

구체적 :

  1. 인 프로세서, 메모리, 그래픽 카드에 한정 R 플로팅 속도?
  2. 특정 하드웨어 구성 요소 또는 구성으로 인해 플로팅 속도가 빨라 집니까?

업데이트 : 의견의 질문에 대한 답변 :

사양 : 제한하고 우분투 11.04는 인텔 코어 듀오, 8 기가 바이트 램,하지만 난 더 일반적으로 그래픽 연산이나 그래픽 렌더링 거세한 숫양에 관심 , 그렇다면이 정보를 어떻게 사용할 수 있습니까?

내 플롯에는 많은 오브젝트가 있지만 플로팅의 계산 비용은 무엇인지 알지 못합니다. 플로팅하는 동안 특정 분석을 수행하지 않습니다 (필요한 분석을 완료 한 후 플로팅 중입니다). 일부는 평평한 선을 그릴 때 또는 데이터를 위치로 변환 할 때처럼 '즉시 수행'됩니다.

+0

당신은 병렬 처리를 들여다 보았습니까? 또는 컴퓨터 집중 형 단일 플롯에 주로 관심이 있습니까? –

+0

@Xu 아니, 나는 그 점을 생각하지 않았고, 나는 종종 여러 개의 그림에 관심이있다. –

+0

여러 프로세서가 있습니까? 어떤 운영 체제를 사용하고 있습니까? 또한 CPU 사용량이나 RAM을 더 많이 원한다면 아마존과 같은 클라우드 서비스를 사용하십시오. 나는 이것에 대해 아무것도 몰라. –

답변

9

컴퓨터 집약적 인 단일 플롯이있는 경우가 아니면 병렬 처리로 여러 플롯 팅 속도를 높이는 좋은 방법입니다. 예를 들어, 데이터 프레임이 있고 특정 변수 (또는 변수)로 분할하고 각 파티션에 대해 플롯을 작성한다고 가정합니다.

병렬 백엔드를 등록하는 방법은 여러 가지가 있으므로 여기서는 다루지 않을 것입니다. 예를 들어이 비 네트를 참조하십시오. http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

그런 다음 해들리의 plyr 패키지에있는 ddply 기능을 확인하고 .parallel = TRUE 옵션을 사용하십시오. 그것은 기본적입니다. 그런 다음 정상적으로 음모를 꾸미십시오. 이것은 mtcars dataframe의 vs 변수의 수준 (즉, 고유 한 값) 두 파일, 0.pdf 및 1.pdf을 절약 할 수

#this is the particular library I chose to register a parallel backend. There are others. See the new "Parallel R" book for details. 
library(doMC) 
registerDoMC() 
getDoParWorkers() #This lists how many workers you have (hopefully more than 1!) 

library(ggplot2) 
ddply(
     mtcars, .variables = "vs", .fun = function(x) { 
     #do your plotting now 
     example_plot <- ggplot(x, aes(y = mpg, x = wt)) + geom_point() + geom_smooth(se = FALSE) 
     #save your plot 
     ggsave(paste(x$vs[1],".pdf",sep = ""), example_plot) 
     }, 
     .parallel = TRUE 
) 

: 여기

은 자체에 포함 된 예제 . 변수 country name로 분류하면 저장된 파일은 국가의 이름이됩니다. 0.pdf 및 1.pdf은 다음과 같습니다 : @Xu 왕이 지적 하듯이

enter image description here

enter image description here

+2

좋은 예이지만 공정한 ggplot (2) 대신에 격자를 사용하는 것이 좋습니다. 훨씬 더 빠를 수 있습니다. –

4

, 당신은 한 번에 여러 플롯을 그릴 병렬화를 사용할 수 있습니다.

하드웨어가 현명하므로 강력한 RAM을 갖춘 강력한 멀티 코어 머신이 약간 도움이됩니다.

x-y 플롯 (산점도)에 1 백만 개의 원으로 단일 플롯을 플로팅하려는 경우 그래픽 하드웨어 가속이 매우 유용합니다.

그러나 빠른 그래픽 카드는 R의 그래픽 장치가 하드웨어 가속을 지원하는 경우에만 도움이됩니다. 현재는 그렇지 않습니다. @hadley가 지적한 것처럼 ggplot은 표준 그래픽 장치를 사용합니다.

rgl 패키지는 분명히 OpenGL을 사용하여 3D 그래픽을 처리합니다. 비록 그것을 시도하지 않았습니다. 어떤 플롯을보다 효율적으로 그리는 데 사용할 수 있습니다 ...

빠른 대화식 하드웨어 가속화 플롯 (2d 및 3d)을 만드는 데 경험이 있으며 속도가 더 빠를 수 있습니다. 2 차원 플롯은 실제로 3D 플레임보다 가속하기가 더 어렵습니다 ... 아마도 R의 현재 그래픽 장치 개념에 쉽게 꽂을 수는 없습니다.

업데이트 방금 ​​rgl과 그 plot3d에 100 만 점을 시도했습니다. 그것은 내 (오히려 강력한) 랩탑에서 완전히 상호 작용합니다 (업데이트 할 작은 부분).

library(rgl) 
x <- sort(rnorm(1e6)) 
y <- rnorm(1e6) 
z <- rnorm(1e6) + atan2(x,y) 
plot3d(x, y, z, col=rainbow(1000)) 
+2

Ggplot2는 R 그래픽 장치가 하드웨어 가속을 지원한다면 – hadley

+0

@hadley - 좋은 지적입니다! 업데이트 된 답변. – Tommy

+0

좋은 답변. 여기에 멋진 rgl 예제가 있습니다. http://stackoverflow.com/a/6814180/636656 –

관련 문제