R базовый пакет сохранения графиков в цикле - PullRequest
0 голосов
/ 05 июня 2019

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

foo <- data.frame(Date=seq.Date(as.Date("1957-01-01"), by = "day", 
                        length.out = ncol(milk$spectra)),
          Visits=milk$spectra[1,],
          Old_baseline_visits=milk$spectra[1,], row.names = NULL)
foo.t <- t(foo$Visits)
#the lines above were copied from https://stackoverflow.com/questions/37346967/r-packagebaseline-application-to-sample-dataset to make a reproducible dataset

df <- expand.grid(lambda=seq(1,10,1), p=seq(0.01,0.1,0.01))
baselinediff <- list()

for(i in 1:nrow(df)){
  thislambda <- df[i,]$lambda
  thisp <- df[i,]$p
  thisplot <- baseline(foo.t, lambda=thislambda, p=thisp, maxit=20, method='als')
  print(paste0("lambda = ", thislambda))
  print(paste0("p = ", thisp))
  print(paste0("index = ", i))
  baselinediff[[i]] <- plot(thisplot)
  jpeg(file = paste(baselinediff[[i]], '.jpeg', sep = ''))
  dev.off()
}

Я знаю, что смогу извлечь скорректированные спектры, используя baseline.als, но я просто хочу сохранить изображения графика с красной базовой линией, чтобы я мог видеть, насколько хороши базовые линиивтягиваетсяЛюбые baseline пользователи, которые могут помочь?

1 Ответ

1 голос
/ 06 июня 2019

Я предлагаю вам изменить цикл следующим образом:

for(i in 1:nrow(df)){
  thislambda <- df[i,]$lambda
  thisp <- df[i,]$p
  thisplot <- baseline(foo.t, lambda=thislambda, p=thisp, maxit=20, method='als')
  print(paste0("lambda = ", thislambda))
  print(paste0("p = ", thisp))
  print(paste0("index = ", i))
  baselinediff[[i]] <- thisplot
  jpeg(file = paste('baseline', i, '.jpeg', sep = ''))
  plot(baselinediff[[i]])
  dev.off()
}

Обратите внимание, что это не пытается захватить уже нанесенный элемент (thisplot) внутри списка.Вместо этого построение графика выполняется после вызова команды jpeg.Это решает вашу проблему экспорта.Еще одной проблемой было присвоение имени файлу.Если вы наберете baselinediff[[i]] внутри paste, вы, вероятно, получите ошибку.Поэтому я перешел на более простое имя.Чтобы составить результирующий список, позвоните по номеру:

lapply(baselinediff, plot)

Если вы настроены на сохранение элемента уже , функция capture.plot из пакета imager может быть хорошим началом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...