2015-07-02 5 views
1

У меня есть код в R, чтобы выполнить классификацию и оценку (используя регрессионное моделирование) на 60 наборах данных с использованием алгоритма случайного леса, и в конце этого есть график, показывающий, как количество изменяется со временем. Я выполняю процедуру оставления на одном и том же, и поскольку это занимает много времени, я использовал параллельную обработку, используя пакет doSnow. Я могу видеть, что код действительно работает (я сохраняю вывод своих кошачьих команд в отдельном файле журнала). Однако, когда я открываю график, сохраненный после каждой итерации цикла foreach, он пуст. Похоже на полную трату времени, так как результаты сюжета были единственным выходом, который я спасал. Что я здесь делаю неправильно? Я использую R-Studio.Параллельная обработка в R

Код:

# Plotting 
graphics.off() 

plotIt(times,result) 
dev.copy(device=png,filename=str_c(p1,"/",cur,".png"),width = 800, height = 600) 
dev.off() 

и определение для plotIt (UserDefined Fn) является:

plotIt = function(times,result) 
    { 
    par(mar=c(4.1,4.2,0.5,0.5)) 
    par(mfrow=c(2,1)) 

    t = time[ length(time) ] 
    plot(time/60,result 
     ,xlab="time (min)" 
     ,ylab="output" 
     ,xlim=c(min(times)/60,max(times)/60) 
     ,ylim=c(0,1) 
     ,"s" 
     ) 
    points(t/60,result[length(result)],col="red") 
    lines(c(min(times)/60,max(times)/60),c(0.5,0.5),lty=2) 
    lines(c(0,0),c(0,1),lty=3) 
    } 

Участок растет с увеличением значения времени. По мере роста я сохраняю каждый кадр. «cur» обозначает номер кадра. Предположим, что значение моего значения составляет от 1 до 50, у меня будет 50 кадров с окончательным кадром, показывающим готовый сюжет. Таким образом, внутри моего пути (p1) у меня будет 50 графиков (png-файлы).

+0

Пожалуйста, покажите некоторые приходят, нам нужен [воспроизводимый пример] (HTTP: // StackOverflow. ком/вопросы/5963269/как в изготовлении, а-пре-р-воспроизводимый-пример). Как вы сохраняете сюжеты? Использование 'ggsave'? – Molx

+0

# Plotting \t graphics.off() \t plotIt (раз, результат) dev.copy (устройство = PNG, имя файла = str_c (р1, "/", текущ "PNG"), ширина = 800, height = 600) \t dev.off() где plotIt - функция, которая использует график (время, выход) – Vysh

+0

Где находится «plotIt'? Это не из ggplot2. Разве это не должно быть «сюжет»? – Molx

ответ

1

Этот вопрос задавался в двух экземплярах в нескольких случаях. Пожалуйста, сохраните его только в одном экземпляре.

Насколько ответ идет: вместо кода ниже,

filename=str_c(p1,"/",cur,".png") 

Вы можете задать имя файла с помощью

filename=paste(p1,"/",cur,".png",sep="") 

Я надеюсь, что p1 путь к файлу. В случае, если у вас возникли проблемы с «/» в пути/file.png, пожалуйста, используйте

graphics.off() 
setwd(p1) 
png(filename=paste(cur,".png",sep=""),width = 800, height = 600) 
plotIt(times,result) 
dev.off() 

Вы что-нибудь о том, как «дворняжка» становится генерироваться не написано. Поэтому, пожалуйста, включите это в свое объяснение, чтобы стало легче находить проблемы с кодом. Best -Mandar

+0

Спасибо за ответ. Добавлен. И извините, мой плохой, первый раз, используя эти форумы. Я думал, что оба они раздельные. Дело в том, что это работает отлично, и я получаю то, что хочу, когда делаю простой цикл. Однако, когда я пытаюсь помещать его в foreach и делать параллельно, у меня просто есть пустые png-файлы. Не знаете, как это исправить. – Vysh

+0

Привет Можете ли вы добавить код, который вы используете для создания «cur»? И добавьте свой foreach и doParallel код тоже. Давайте взглянем на это :) – Mandar

1

Что делать, если вы попытались открыть устройство png перед тем, как сделать сюжет. Я подозреваю, что так вы его plotIt посылается на устройство NULL, следовательно, почему вы получаете пустой участок

png(filename=str_c(p1,"/",cur,".png"),width = 800, height = 600) 
plotIt(times,result) 
dev.off() 
+0

Просто понял, что предыдущий ответ имел ту же концепцию – Oscar

Смежные вопросы