Установите параметры графики R локально, но не глобально?
Есть ли способ установить или замаскировать par() в локальной среде? Я не очень хорошо знаком с R-окружениями, поэтому мне не ясно, почему это невозможно, хотя я определенно понимаю, почему это не поведение по умолчанию. Я видел этот вопрос, но я не знаю достаточно, чтобы знать, применим ли он здесь. Я также был бы удивлен, если бы не было способа настроить путь поиска, чтобы заставить его работать.
Опять же, нет никакого способа настроить алгоритм, который решает, следует ли опустите некоторые из ваших меток оси... было бы так трудно просто иметь переключатель, чтобы отключить функцию и позволить пользователям заплатить цену? Похоже, это была философия дизайна для всего остального в языке (и я начинаю это ценить).
2 ответов:
В дополнение к другим ответам и комментариям, обратите внимание, что графические параметры являются локальными для графического устройства, поэтому вы можете открыть новое графическое устройство, установить нужные параметры, а затем, когда вы закончите, закрыть устройство (или переключиться обратно на другое), и предыдущие параметры будут действовать. Краткий пример:
dev.new() par(col='blue') hist(rnorm(100)) abline(v=0, lwd=5) dev.new() par(col='red') hist(rnorm(1000)) par(lwd=5) abline(v=0) dev.off() plot(runif(25), rnorm(25)) abline(h=0, lwd=3)Смотрите справку для
dev.listиdev.setдля получения подробной информации о переключении между графическими устройствами.
Как было отмечено выше, вы можете передать параметры
parв функциюplot, но это не всегда работает для внесенных функций построения графика (и не все параметры работают таким образом-см.?par). Другой полезной идиомой для ограничения изменений параметров в теле функции являетсяfunction(...) { old.pars <- par(...,no.readonly=TRUE) on.exit(par(old.pars))) ... }Я не уверен на 100%, что эта идиома безопасна, если вы выходите из функции нестандартным способом (например, Ctrl-C во время работы функции или debugging / Q, а не обычным
return())У меня есть столкнулся с несколькими функциями в рамках внесенных пакетов, которые изменяют глобальные настройки
parбез их сброса, что я считаю очень плохой практикой ...
Comments