Аргумент эллипсоида scatter3d внутри блестящего R не работает

Два шага вперед, один шаг назад. В последние недели я столкнулся с несколькими проблемами, которые я не мог решить самостоятельно как самодовольный пользователь с 1-летним опытом работы в R, но, к счастью, на этом сайте есть замечательные люди, которые мне очень помогли! Прежде всего, спасибо за это, ребята.

Похоже, теперь мы нашли способ вставить графики scatter3d в приложение Shiny App, которое я создаю, и заставить работать левую кнопку мыши (см. Мои предыдущие вопросы). Теперь я столкнулся с ошибкой, которую я не понимаю.

Ошибка говорит об этом: старший минор 3-го порядка не является положительно определенным через некоторое время, когда я озадачен, я обнаружил, что он находится внутри аргумента эллипсоида scatter3d.

работает это работает нормально:

library(rgl)
library(car)
library(shiny)

colors <- rep("grey", 25)  ### dummy palette of all greys
groups <- as.factor(rep(1:25,2)) ### make 5 categories 

cars$time <- cars$dist/cars$speed

ui <- fluidPage(
  hr("how do we get the plot inside this app window rather than in a popup?"),

  rglwidgetOutput("plot",  width = 800, height = 600)
)

server <- (function(input, output) {

  output$plot <- renderRglwidget({
    rgl.open(useNULL=F)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = FALSE, groups = groups, surface.col = colors)
    par3d(mouseMode = "trackball")
    rglwidget()
  })
})   
shinyApp(ui = ui, server = server)

Переключение на эллипсоид = ИСТИНА дает ошибку, и ничего не отображается в блестящем

Запуск графа без блеска, просто запустив эти строки:

rgl.open(useNULL=F)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE, groups = groups, surface.col = colors)

работает как в том, что он рендерится внутри окна rgl, но все равно печатает ошибку, конечно.

кажется, это решает изменение количества групп до менее 14: groups <- as.factor (rep (1: 13,5)) groups <- groups [1:50]
не дает ошибок. groups <- as.factor (rep (1: 14,5)) groups <- groups [1:50] выдает ошибку..... очень странно.

Сначала я подумал, что это может быть связано со сборкой n цветов scatter3d, потому что до 8 групп, он красит вещи автоматически, без указания surface.col. Как только у вас будет 9 групп, вы должны сами придать ему палитру, но это сокращение № 13 кажется довольно неловким....

  • Я также отметил его как RGL, хотя это не является частью проблемы, так что некоторые люди, которые следят за моим другим вопросом, связанным с RGL, могут видеть, что я поставил эту проблему в новом вопросе.

1 ответ

Решение

Ваша проблема в том, что вам просто не хватает данных. Это заставляет его пытаться вычислить эллипсоид, когда у него недостаточно очков (по крайней мере, 3 на группу, я думаю). Сообщение об ошибке, очевидно, может быть лучше, но оно не является неправильным, оно относится к тому, что идет не так в расчетах.

Я создал параметризованный ncars это просто большая повторная выборка исходных данных, поэтому она должна выглядеть примерно так.

Вот:

library(rgl)
library(car)
library(shiny)

makebigcars <- function(n){
  newspeed <- sample(cars$speed,n,replace=T)
  newdist <- sample(cars$dist,n,replace=T)
  bigcars <- data.frame(speed=newspeed,dist=newdist)
  bigcars$time = bigcars$dist/bigcars$speed
  return(bigcars)
}
ncars <- makebigcars(150)

n <- nrow(ncars)
colors <- rep("grey", n)  ### dummy palette of all greys
groups <- as.factor(rep(1:5,n))[1:n] ## groups

ui <- fluidPage(
  hr("Scatter3d"),

  rglwidgetOutput("plot",  width = 800, height = 600)
)

server <- (function(input, output) {

  output$plot <- renderRglwidget({
    rgl.open(useNULL=F)
    scatter3d(x=ncars$speed, y=ncars$dist, z=ncars$time, surface=FALSE, 
                ellipsoid = T, groups = groups, surface.col = colors)
    par3d(mouseMode = "trackball")
    rglwidget()
  })
})   
shinyApp(ui = ui, server = server)

а вот и сюжет:

Другие вопросы по тегам