Как отобразить только первые два графика `сюжета (модели)` в режиме скрипта?

У меня есть сценарий, который по сути сводится к

model <- lm(d$o ~ d$t * d$w)
plot(model)

Когда я запускаю эти команды в интерактивном режиме (RStudio), plot создаст четыре графика. Пользователь должен перейти к следующему графику, нажав клавишу ВВОД.

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

Как я мог этого добиться?

Редактировать

Было предложено использовать параметр which (описанный в ?plot.lm). Тем не менее, если я изменю соответствующую строку на

plot(model, which=1)

сценарий прерывается с

Error in box(...) : invalid 'which' argument
Calls: plot -> plot.default -> localBox -> box
In addition: Warning messages:
1: In plot.window(...) : "which" is not a graphical parameter
2: In plot.xy(xy, type, ...) : "which" is not a graphical parameter
3: In axis(side = side, at = at, labels = labels, ...) :
  "which" is not a graphical parameter
4: In axis(side = side, at = at, labels = labels, ...) :
  "which" is not a graphical parameter
Execution halted

person René Nyffenegger    schedule 03.07.2015    source источник
comment
Возможно which аргумент plot.   -  person    schedule 03.07.2015
comment
... как описано в самом первом предложении в тексте справки: Шесть графиков (выбирается which).   -  person Henrik    schedule 03.07.2015
comment
Да, верно, это в ?plot.lm, о котором я до сих пор не знал. Спасибо, что указали мне на это направление.   -  person René Nyffenegger    schedule 03.07.2015
comment
Вы получаете сообщение об ошибке, если выполняете команду в интерактивном режиме? В качестве альтернативы вы можете сами строить чертежи вручную. Например, остаточный график может быть выполнен с помощью plot(model$fitted.values, model$residuals, xlab = "Fitted Values", ylab = "Residuals", type = "n"); panel.smooth(model$fitted.values, model$residuals, col = "red"); points(model$fitted.values, model$residuals); abline(h = 0, lty = 3, col = "grey") . Посмотрите на str(model) все элементы в объекте lm и getAnywhere(plot.lm), чтобы увидеть, как функция выполняет каждый график. (не очень прямолинейно, но может оказаться там ...)   -  person hugot    schedule 03.07.2015
comment
Ваш plot вызов отправляется на plot.default, тогда как он должен plot.lm. Вероятно, ваш model объект каким-то образом не принадлежит к классу lm. Попробовать plot.lm напрямую?   -  person tonytonov    schedule 03.07.2015


Ответы (2)


Попробуй это:

plot(model, which=1:2). 

Это сработало для меня.

person Hinda Ruton    schedule 29.11.2016

Мы не знаем ваших данных. Но это работает!

n=50
d=data.frame(o=rnorm(n,10,3),t=1:n,w=rep(c("A","B","C"),length.out=n))
model <- lm(d$o ~ d$t * d$w)
plot(model)
op=par(mfrow=c(2,2))
for(i in 1:4)plot(model, which=i)
par(op)

введите описание изображения здесь

person Robert    schedule 03.07.2015