Подтвердить что ты не робот

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

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

В частности:

  • Является ли скорость построения графика в R ограничена процессором, памятью, графикой?
  • Могут ли конкретные аппаратные компоненты или конфигурации увеличить скорость печати?

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

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

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

4b9b3361

Ответ 1

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

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

Затем проверьте функцию ddply в пакете Hadley plyr и используйте опцию .parallel = TRUE. Это в основном это. Затем просто выполните обычную печать.

Здесь приведен отдельный пример:

#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

Ответ 2

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

Таким образом, аппаратный мудрый, мощный быстрый многоядерный компьютер с большим количеством оперативной памяти поможет немного.

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

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

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

У меня есть опыт создания быстрых интерактивных аппаратных ускоренных графиков (2d и 3d), и это может быть больше. 2d-графики на самом деле сложнее ускорить, чем 3-е... Возможно, нелегко подключиться к 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))