2017-02-10 41 views
1

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

«Ошибка в lda.default (х, группировка, ...): переменных 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. 

enter image description here

+0

строка 'ех = ириса [х]' не требуется –

+0

я не удалить его, как это может быть ниже по течению в применении УОП, а не часть их MWE. По той же причине, почему я прокомментировал часть 'grid.arrange()', поскольку она может использоваться в других местах –

+0

Теперь у меня другая ошибка, и приложение все еще ведет себя одинаково. «Ошибка в eval (expr, envir, enc): объект« setosa »не найден» – Anuraag