Консоль R выдает данные независимо от ошибки, а приложение Shiny - не из-за ошибки. Как я могу обойти ошибку в приложении Shiny?

Когда я запускаю приведенный ниже код в консоли R, я получаю следующую ошибку в строке 10:

"Ошибка в lda.default(x, grouping, ...): переменные 5 6 кажутся постоянными внутри групп"

Однако остальная часть кода все еще обрабатывается и данные выводятся на график. Но когда я интегрирую этот код в свое блестящее приложение, панель графика показывает сообщение об ошибке и ничего больше.

Есть ли способ обойти это?

Входные данные:

require(MASS)
require(ggplot2)
require(scales)
require(gridExtra)

x = 'Species'
ex = iris[, x]

lda <- lda(ex ~ ., iris)

prop.lda = lda$svd^2/sum(lda$svd^2)

plda <- predict(object = lda, newdata = iris)

dataset = data.frame(colAndShape = iris[,"Species"], lda = plda$x)

p1 <- ggplot(dataset) + geom_point(aes(lda.LD1, lda.LD2, colour = colAndShape, shape = colAndShape), size = 2.5) + 
    labs(x = paste("LD1 (", percent(prop.lda[1]), ")", sep=""),
    y = paste("LD2 (", percent(prop.lda[2]), ")", sep=""))

grid.arrange(p1)

Консольный вывод:

> require(MASS)
> require(ggplot2)
> require(scales)
> require(gridExtra)
> 
> x = 'Species'
> 
> ex = iris[, x]
> 
> lda <- lda(ex ~ ., iris)
Error in lda.default(x, grouping, ...) : 
  variables 5 6 appear to be constant within groups
> 
> prop.lda = lda$svd^2/sum(lda$svd^2)
> 
> plda <- predict(object = lda,
+                 newdata = iris)
> 
> dataset = data.frame(colAndShape = iris[,"Species"], lda = plda$x)
> 
> p1 <- ggplot(dataset) + geom_point(aes(lda.LD1, lda.LD2, colour = colAndShape, shape = colAndShape), size = 2.5) + 
+   labs(x = paste("LD1 (", percent(prop.lda[1]), ")", sep=""),
+        y = paste("LD2 (", percent(prop.lda[2]), ")", sep=""))
>  
> grid.arrange(p1)

1 ответ

У вас есть ошибка в вашем lda вызов. Вместо указания имени переменной в формуле вы предоставляете вектор фактора. Вы должны построить формулу из переменных, используя paste или же sprintf а также as.formula,

x = 'Species'
lda <- lda(as.formula(paste(x, ".", sep = "~")), iris)

prop.lda = lda$svd^2/sum(lda$svd^2)

plda <- predict(object = lda, newdata = iris)

dataset = data.frame(colAndShape = iris[,"Species"], lda = plda$x)

p1 <- ggplot(dataset) + geom_point(aes(lda.LD1, lda.LD2, colour = colAndShape, shape = colAndShape), size = 2.5) + 
    labs(x = paste("LD1 (", percent(prop.lda[1]), ")", sep=""),
    y = paste("LD2 (", percent(prop.lda[2]), ")", sep=""))

p1  #grid.arrange(p1) isn't needed in this example.

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

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