Какое оборудование ограничивает скорость построения графика в R?

Я хотел бы увеличить скорость построения, и я доволен (и имею много кода, требующего) R graphics и ggplot packages-поэтому мне интересно только знать,как я могу настроить свою систему для ускорения построения.

в частности:

  1. скорость построения графика в R ограничена процессором, памятью, видеокартой?
  2. есть конкретное аппаратных компонентов и конфигураций позволит увеличить заговор скорость?

Update: ответы на вопросы в комментариях:

спецификации: Ubuntu 11.04, intel Core Duo, 8GB ram, но меня больше интересует, ограничивают ли графические вычисления или графический рендеринг, и если да, то как я могу использовать эту информацию.

на моих участках много объектов, но я понятия не имею, каковы вычислительные затраты на построение. Я не делаю никаких конкретных анализов во время построения (я строю после завершения любого необходимые анализы), хотя я понимаю, что некоторые из них выполняются "на лету", как при построении сглаженной линии или даже переводе данных в местоположения.

2 ответов


если у вас нет компьютерно-интенсивных одиночных графиков, отличный способ ускорить несколько графиков с параллельной обработкой. Например, предположим, что у вас есть фрейм данных, и вы хотите разбить его на определенную переменную (или переменные) и сделать графики для каждого раздела.

есть много способов зарегистрировать параллельный бэкэнд, поэтому я не буду вдаваться в это. См., например, эту виньетку: http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

тогда проверьте функцию ddply в пакета и использовать . В общем, это все. Тогда просто делайте заговор нормально.

вот автономный пример:

#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
)

это сохранит два файла, 0.pdf и 1.pdf, которые являются уровнями (т. е. уникальными значениями)vs переменная mtcars таблицы данных. Если ты сломаешься ... переменная country name тогда сохраненные файлы будут названиями стран. 0.pdf и 1.pdf, как показано ниже:

enter image description here

enter image description here


как указывает @Xu Wang, вы можете использовать распараллеливание, чтобы нарисовать сразу несколько графиков.

таким образом, аппаратное обеспечение, мощная быстрая многоядерная машина с большим количеством ОЗУ немного поможет.

если вы хотите построить один сюжет, скажем, с 1 миллионом кругов в X-y графике (scatter plot), то аппаратное ускорение графики было бы очень полезно.

но быстрая видеокарта помогает только в том случае, если графические устройства в R поддерживают аппаратное ускорение. В настоящий момент они этого не делают - и, как указывает @hadley,ggplot использует стандартные графические устройства.

на rgl пакет, по-видимому, использует OpenGL для 3D-графики. Еще не пробовал. Возможно, вы сможете использовать его для более эффективного рисования некоторых участков...

у меня есть опыт создания быстрых интерактивных аппаратных ускоренных графиков (2d и 3d), и это может быть быстрее. 2d-графики на самом деле сложнее ускорить, чем 3d-графики... Вероятно, не так просто подключить однако в текущую концепцию графического устройства R.

обновление Я только что пытался rgl и plot3d С 1 млн точек. Он полностью интерактивен (небольшие доли секунды для обновления) на моем (довольно мощном) ноутбуке.

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