2016-06-09 3 views
2

Я пытаюсь создать инкрементный HE-график в записной книжке R, который будет скомпилирован в HTML (так что .R-файл). Функция, которую я использую heplot() из пакета heplots, использует параметр add = TRUE для наложения графики по сравнению с предыдущей, что полезно, когда есть несколько групп, которые вы хотите сравнить.Инкрементный график в R Notebook Error

Если я бегу это как R ноутбук, я получаю следующее сообщение об ошибке:

Error in polygon(E.ellipse, col = last(fill.col), border = last(col), : 
    plot.new has not been called yet 
Calls: <Anonymous> ... withVisible -> eval -> eval -> heplot -> heplot.mlm -> polygon 

Я считаю, это потому, что R ноутбук не держит предыдущий участок в памяти, когда он оценивает второй участок.

Вот воспроизводимый пример проблемного файла ноутбука R (сохранить как .R):

#' --- 
#' title: "Incremental HE Plots Test" 
#' author: "Matthew Sigal" 
#' date: "08 Jun 2016" 
#' --- 

#' ## Load package and data: 
library(heplots) 
data(Rohwer, package="heplots") 

#' ## Multivariate models for two subsets: 
rohwer.ses1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, 
        data = Rohwer, subset = SES == "Hi") 
rohwer.ses2 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, 
        data = Rohwer, subset = SES == "Lo") 

#' ## Overlaid visualization: 
heplot(rohwer.ses2, col = c("red", rep("black",5), "blue"), 
     hypotheses = list("B=0, Low SES" = c("n", "s", "ns", "na", "ss")), 
     level = 0.5, cex = 1.25, 
     fill = c(TRUE, FALSE), fill.alpha = 0.05, 
     xlim = c(-15, 110), ylim = c(40, 110), 
     label.pos = c(1, rep(NULL, 5), 1)) 

#' ## High SES students: 
heplot(rohwer.ses1, col = c("red", rep("black", 5), "blue"), 
     hypotheses = list("B=0, High SES" = c("n", "s", "ns", "na", "ss")), 
     level = 0.5, cex = 1.25, 
     add = TRUE, # place both plots on same graphic 
     error = TRUE, # error ellipse is not drawn by default with add = TRUE 
     fill = c(TRUE, FALSE), fill.alpha = 0.05, 
     xlim = c(-15, 110), ylim = c(40, 110)) 

Я подумал, что, может быть, с помощью опции куска, например, fig.show="hold" может работать, но это не решить вопрос.

Если я вязать это в документе Rmarkdown, он работает, как ожидалось (сохранить как .Rmd):

--- 
title: "Rmd Test" 
author: "Matthew Sigal" 
date: "June 9, 2016" 
output: html_document 
--- 

## Test 

```{r} 
library(heplots) 
data(Rohwer, package="heplots") 
rohwer.ses1 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, 
        data = Rohwer, subset = SES == "Hi") 
rohwer.ses2 <- lm(cbind(SAT, PPVT, Raven) ~ n + s + ns + na + ss, 
        data = Rohwer, subset = SES == "Lo") 

heplot(rohwer.ses2, col = c("red", rep("black",5), "blue"), 
     hypotheses = list("B=0, Low SES" = c("n", "s", "ns", "na", "ss")), 
     level = 0.5, cex = 1.25, 
     fill = c(TRUE, FALSE), fill.alpha = 0.05, 
     xlim = c(-15, 110), ylim = c(40, 110), 
     label.pos = c(1, rep(NULL, 5), 1)) 
heplot(rohwer.ses1, col = c("red", rep("black", 5), "blue"), 
     hypotheses = list("B=0, High SES" = c("n", "s", "ns", "na", "ss")), 
     level = 0.5, cex = 1.25, 
     add = TRUE, # place both plots on same graphic 
     error = TRUE, # error ellipse is not drawn by default with add = TRUE 
     fill = c(TRUE, FALSE), fill.alpha = 0.05, 
     xlim = c(-15, 110), ylim = c(40, 110)) 
``` 

Итак, мой вопрос: как я могу получить компилятор Rnotebook аналогично действовать в Rmarkdown компилятор?

ответ

1

По-видимому, моя проблема была очень незначительной - мой комментарий для второго сюжета HE создал новый фрагмент, что и вызвало ошибку.

Рабочий скрипт просто удаляет #' из комментария между двумя вызовами на heplot()!

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