В R, что означает ошибка «нужна хотя бы одна панель» и как ее исправить?

#r #lattice

#r #решетка

Вопрос:

Следующий код взят из книги «R в действии», листинг 16.1:

 library(lattice)
attach(mtcars)

gear <- factor(gear, levels=c(3, 4, 5),
               labels=c("3 gears", "4 gears", "5 gears"))
cyl <- factor(cyl, levels=c(4, 6, 8),
              labels=c("4 cylinders", "6 cylinders", "8 cylinders"))

densityplot(~mpg,
            main="Density Plot",
            xlab="Miles per Gallon")

densityplot(~mpg | cyl,
            main="Density Plot by Number of Cylinders",
            xlab="Miles per Gallon")

bwplot(cyl ~ mpg | gear,main="Box Plots by Cylinders and Gears",
       xlab="Miles per Gallon", ylab="Cylinders")


xyplot(mpg ~ wt | cyl * gear,
       main="Scatter Plots by Cylinders and Gears",
       xlab="Car Weight", ylab="Miles per Gallon")

cloud(mpg ~ wt * qsec | cyl,
      main="3D Scatter Plots by Cylinders")

dotplot(cyl ~ mpg | gear,
        main="Dot Plots by Number of Gears and Cylinders",
        xlab="Miles Per Gallon")

splom(mtcars[c(1, 3, 4, 5, 6)],
      main="Scatter Plot Matrix for mtcars Data")

detach(mtcars)
 

Я могу построить только первый график плотности и последний график, splom (…). Остальные графики выдают мне следующую ошибку:

Ошибка в limits.and.aspect(default.prepanel, prepanel = prepanel, have.xlim = have.xlim, : нужна хотя бы одна панель

Что означает эта ошибка и как мне ее исправить?

Я только начал изучать R, и версия, которую я использую,:

 R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_Malaysia.1252  LC_CTYPE=English_Malaysia.1252   
[3] LC_MONETARY=English_Malaysia.1252 LC_NUMERIC=C                     
[5] LC_TIME=English_Malaysia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lattice_0.20-29

loaded via a namespace (and not attached):
[1] grid_3.1.0
 

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

Вывод search():

  [1] ".GlobalEnv"        "mtcars"            "package:lattice"  
 [4] "package:stats"     "package:graphics"  "package:grDevices"
 [7] "package:utils"     "package:datasets"  "package:methods"  
[10] "Autoloads"         "package:base"  
 

Комментарии:

1. Вы уверены, что запустили именно их? Они работают для меня. Возможно, перезапустите сеанс R и повторите попытку. Примеры показывают плохую практику прикрепления data.frame к пути поиска, а не просто включения его в качестве параметра в функцию построения графика, поэтому я не уверен, что это отличный набор для изучения. Кроме того, вывод sessionInfo() будет более полезным, чем информация о версии.

2. Что, если вы попробуете densityplot(~mpg | cyl, mtcars, main="Density Plot by Number of Cylinders", xlab="Miles per Gallon") вместо этого. Это работает? Забудьте о прикреплении data.frame.

3. @MrFlick да, я запустил именно их. Чтобы быть уверенным, я закрыл R, открыл его, скопировал приведенный выше код в новый скрипт, выделил весь код и запустил его с помощью Ctrl R. Ошибки все еще появляются

4. @MrFlick Да, ваше предложение включить фрейм данных в функцию построения графиков работает! Есть идеи, что вызывает это странное поведение и что вообще означает ошибка?

5. Когда это происходит, должна быть какая-то проблема с разрешением имен переменных. Я не могу придумать ни одной причины, которая должна произойти. Вы можете ввести каждое из имен переменных в формуле, чтобы убедиться, что значения найдены. Но я бы настоятельно рекомендовал вам в attach() любом случае использовать метод и явно передавать data.frame в функцию построения графика. Вы можете получить встроенный код в комментариях, если окружите код обратными галочками (кнопка слева от «1» в верхней части клавиатуры).

Ответ №1:

У меня была такая же проблема, когда я копировал код из QuickR. Я решил ее, изменив уровни gear и cyl с int на string, поскольку все значения в наборе данных являются строками.

 gear.f<-factor(gear,levels=c("3gears","4gears","5gears"),
    labels=c("3gears","4gears","5gears")) 
cyl.f <-factor(cyl,levels=c("4cyl","6cyl","8cyl"),
    labels=c("4cyl","6cyl","8cyl")) 
 

Ответ №2:

Просто добавьте данные "mtcars" , как показано ниже,

 bwplot(cyl ~ mpg | mtcars$gear, main = "Box Plots by Cylinders and Gears", xlab = "Miles per Gallon", ylab = "Cylinders")
 

у меня это работает.