Какое оборудование ограничивает скорость печати в R?
Я хотел бы увеличить скорость построения, и я доволен (и у меня много кода) R-графики и ggplot-пакетов, поэтому мне интересно только знать, как я могу настроить свою систему для ускорения построения графика,
В частности:
- Является ли скорость построения графика в R ограничена процессором, памятью, графикой?
- Могут ли конкретные аппаратные компоненты или конфигурации увеличить скорость печати?
Обновление: ответы на вопросы в комментариях:
: Ubuntu 11.04, Intel Core Duo, 8 ГБ, но я больше заинтересован в графическом вычислении или графическом рендеринге, и если да, то как я могу использовать эту информацию.
У моих сюжетов много объектов, но я понятия не имею, что такое вычислительные затраты на построение графика. Я не делаю никаких конкретных анализов при построении графика (я планирую после завершения любых необходимых анализов), хотя я понимаю, что некоторые из них выполняются "на лету", как при построении сглаженной линии или даже при переводе данных в местоположения.
Ответы
Ответ 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))