Нулиране на стойностите по подразбиране при стартиране

Обикновено, когато правя свои собствени чертежни функции, правя конструкция:

op <- par("mypar"=myvalue)
on.exit(par(op))

което е стандартният начин за връщане на par към предишните стойности. Представете си, че сте изпълнявали някои функции, които са променили някои от pars, и трябва да нулирате стойностите по подразбиране при стартиране в R. Какъв е удобният начин да направите това?

Или с други думи: как се достигат стойностите по подразбиране за par()?


person Joris Meys    schedule 26.04.2011    source източник
comment
Останах с впечатлението, че всеки път, когато се стартира ново графично устройство, така или иначе му се дават стойности по подразбиране.   -  person James    schedule 26.04.2011
comment

Ето малко код без използването на таймери. Извиквайте startCountdown() всеки път, когато искате да инициализирате обратното броене. Извикайте getAvailableScore(), когато искате да извлечете текущия наличен резултат. Ще трябва да решите какво да правите, когато наличният резултат стане нула.

var beginCountDownTime;

function startCountdown() {
    beginCountDownTime = new Date();
}

function getAvailableScore {
    var now = new Date();
    var delta = (now.getTime() - beginCountDownTime.getTime()) * 1000;  // time elapsed in seconds
    var points = 100 - (delta / 60);
    return(Math.round(Math.max(points, 0)));  // return integer result >= 0
}
  -  person Gavin Simpson    schedule 26.04.2011
comment
@Gavin Simpson Добре, но dev.new() и dev.off() могат да се използват тогава   -  person James    schedule 26.04.2011
comment
@James Indeed; Споменах това на @Joris в R tag стаята за чат, но ние искаме по-малко хакерско решение :-)   -  person Gavin Simpson    schedule 26.04.2011


Отговори (6)


Всеки път, когато се отвори ново устройство, par() ще се нулира, така че друга опция е просто да направите dev.off() и да продължите.

person DarkHalo    schedule 09.08.2015
comment
Сред всички предоставени отговори, това е единственият, който действително отговаря на зададения въпрос. - person gented; 27.08.2015
comment
@DarkHalo не би ли dev.off() бил лош вариант, ако трябваше да имаме няколко графики в pdf? тъй като това ще затвори устройството pdf и така няма да можете да имате множество графики в един pdf файл - person joel.wilson; 09.02.2017

Това е хакерско, но:

resetPar <- function() {
    dev.new()
    op <- par(no.readonly = TRUE)
    dev.off()
    op
}

работи по някакъв начин, но временно показва ново устройство на екрана...

E.g.:

> par(mfrow = c(2,2)) ## some random par change
> par("mfrow")
[1] 2 2
> par(resetPar())     ## reset the pars to defaults
> par("mfrow")        ## back to default
[1] 1 1
person Gavin Simpson    schedule 26.04.2011
comment
Може да е по-безопасно да избягвате опитите за нулиране на елементи, които биха били променени чрез преоразмеряване, като mai, mar, pin, plt и pty (както е предупредено в страницата за помощ). - person IRTFM; 26.04.2011
comment
Подобна идея беше обсъдена на R-help: tolstoy. newcastle.edu.au/R/e2/help/07/09/26665.html - person Aaron left Stack Overflow; 26.04.2011
comment
Не намерих нищо друго, така че ще трябва да го направя. - person Joris Meys; 15.12.2011
comment
@h.l.m В какъв смисъл това не работи с RStudio? Има ли нещо общо с тяхното устройство и кода по-горе, започвайки ново? - person Gavin Simpson; 21.05.2013
comment
Получавам следното съобщение за грешка „Предупредително съобщение: В (функция () : разрешено е само едно графично устройство RStudio“ - person h.l.m; 21.05.2013
comment
@h.l.m Трудно тогава; може да има само едно такова устройство и тъй като R не съхранява настройките по подразбиране, сега има начин, лесно, да ги вземете. Попитайте хората от RStudio за това. Друга възможност е да не променяте par() без да запазите настройките по подразбиране. Или уредете настройките по подразбиране да бъдат взети при стартиране чрез вашия .Rprofile. - person Gavin Simpson; 21.05.2013

От Quick-R

par()              # view current settings
opar <- par()      # make a copy of current settings
par(col.lab="red") # red x and y labels 
hist(mtcars$mpg)   # create a plot with these new settings 
par(opar)          # restore original settings
person Anusha    schedule 31.05.2013
comment
Знам това, но не възстановява стойностите по подразбиране, ако сте ги променили преди. par() показва текущите настройки, а не настройките по подразбиране. - person Joris Meys; 11.06.2013
comment
Това решение може да не работи в този случай, но нека го оставим тук като подход, който не работи. - person Anusha; 19.08.2015

Алтернативно решение за предотвратяване на функции за промяна на потребителя par. Можете да зададете параметрите по подразбиране в началото на функцията, така че графичните параметри и оформлението да не се променят по време на изпълнение на функцията. Вижте ?on.exit за повече подробности.

on.exit(layout(1))
opar<-par(no.readonly=TRUE)
on.exit(par(opar),add=TRUE,after=FALSE)
person Federico Giorgi    schedule 14.10.2019

Използвайте скрипта по-долу, за да се върнете към нормалния 1 график:

par(mfrow = c(1,1))
person Mahesh    schedule 08.08.2018

dev.off() е най-добрата функция, но изчиства и всички графики. Ако искате да запазите графиките във вашия прозорец, в началото запазете настройките по подразбиране:

def.par = par()

След това, когато използвате своите пар функции, все още имате резервно копие на настройките по подразбиране. По-късно, след генериране на графики, завършете с:

par(def.par) #връщане към настройките по подразбиране

С това запазвате генерираните диаграми и нулирате настройките за пар.

person Natalia    schedule 23.04.2020
comment
Имайте предвид, че някои от графичните параметри са само за четене и следователно не могат да бъдат нулирани. Следователно вашето първоначално общо обаждане до par е най-добре да се извърши като par(no.readonly = TRUE). - person BroVic; 24.04.2020