【问题标题】:R console gives output regardless of error, but Shiny app does't due to error. How can I bypass the error in the Shiny app?无论错误如何,R 控制台都会提供输出,但 Shiny 应用程序不会因为错误而输出。如何绕过 Shiny 应用程序中的错误?
【发布时间】:2017-02-10 15:54:27
【问题描述】:

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

【问题讨论】:

    标签: r shiny lda data-science linear-discriminant


    【解决方案1】:

    您的lda 呼叫中有错误。您没有在公式中提供变量名称,而是提供了一个因子向量。您应该使用pastesprintfas.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.
    

    【讨论】:

    • 不需要ex = iris[, x]这一行
    • 我没有删除它,因为它可能位于 OP 应用程序的下游,而不是其 MWE 的一部分。与我注释掉 grid.arrange() 部分的原因相同,因为它可能会在其他地方使用
    • 现在我得到一个不同的错误,应用程序仍然以相同的方式运行。 “评估错误(expr,envir,enclos):找不到对象'setosa'”
    • 不同的错误 = 新问题。您可能需要考虑包含应用程序的完整代码。
    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多