1

当我在 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)
4

1 回答 1

1

您的lda通话有误。您没有在公式中提供变量名称,而是提供了一个因子向量。paste您应该使用orsprintf和从变量构造公式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.

在此处输入图像描述

于 2017-02-10T17:02:13.327 回答