Какое оборудование ограничивает скорость построения графика в R?
Я хотел бы увеличить скорость построения, и я доволен (и имею много кода, требующего) R graphics и ggplot packages-поэтому мне интересно только знать,как я могу настроить свою систему для ускорения построения.
в частности:
- скорость построения графика в R ограничена процессором, памятью, видеокартой?
- есть конкретное аппаратных компонентов и конфигураций позволит увеличить заговор скорость?
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, как показано ниже:
как указывает @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))