2017-02-10 2 views
1

Quand je lance le code ci-dessous dans la console R, je reçois l'erreur suivante dans la ligne 10:R console donne une sortie indépendamment de l'erreur, mais l'application Shiny n'est pas due à une erreur. Comment puis-je contourner l'erreur dans l'application Shiny?

« Erreur dans lda.default (x, regroupement, ...): les variables 5 6 semblent être constant dans les groupes "

Cependant, le reste du code est toujours traité et les données sont tracées. Mais quand j'intègre ce code dans mon application brillante, le panneau de traçage montre le message d'erreur et rien d'autre.

Existe-t-il un moyen de contourner ce problème?

Entrée:

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) 

Sortie de la console:

> 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) 

Répondre

1

Vous avez une erreur dans votre appel lda. Au lieu de fournir un nom de variable dans la formule, vous fournissez un vecteur de facteur. Vous devez construire la formule à partir des variables en utilisant paste ou sprintf et 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

la ligne 'ex = iris [x]' est pas nécessaire –

+0

Je n'ai pas enlevé comme il pourrait être en aval dans l'application de programmes opérationnels, ne fait pas partie de leur MWe. La même raison pour laquelle j'ai commenté la partie 'grille.arrange()', car elle pourrait être utilisée dans d'autres endroits –

+0

Maintenant, je reçois une erreur différente et l'application se comporte toujours de la même manière. "Erreur dans eval (expr, envir, enclos): objet 'setosa' non trouvé" – Anuraag