【问题标题】:R shiny basic ANOVA on imported data producing this error: Error in model.frame.default: invalid type (NULL) for variable 'input$var3'导入数据的 R 闪亮基本方差分析产生此错误:model.frame.default 中的错误:变量“input$var3”的类型无效(NULL)
【发布时间】:2020-06-29 21:12:25
【问题描述】:

我对 R 和 R shiny 非常陌生,我目前正在开发一个基本的闪亮应用程序,它允许用户导入数据集,然后使用 selectInputs 对数据运行方差分析以确定自变量和因变量。但是,每当我尝试执行 anova 函数时,都会收到此错误:

警告:model.frame.default 中的错误:变量“input$var3”的类型无效 (NULL)

我也收到了这个错误:

警告:对比错误

我无法弄清楚为什么会出现此错误,并且大多数解释仅指 R 中的此错误,而不是 R 闪亮。同样,我是初学者,所以我的代码可能非常难看。非常感谢任何帮助!

ui <- fluidPage(theme = shinytheme("cosmo"),

titlePanel("Stats App"),

sidebarLayout(
    sidebarPanel(
        tabsetPanel(type = "tab", 
                    tabPanel("SCI",
                             
                        fileInput("file1", "Insert File", multiple = TRUE, accept = c("text/csv", "text/comma-separated-values, text/plain", ".csv")),
                            
                        selectInput("statChoice", "Choose Stats", c("None" = "None", "ANOVA 0 w/in 1 btw" = "A1btw", "ANOVA 0 w/in 2 btw" = "A2btw")),
                        
                            conditionalPanel("input.statChoice == 'A2btw'",
                                uiOutput("ind1"),
                                uiOutput("ind2"),
                                uiOutput("dep1")),
                        
            )
        )
    ),
   
    mainPanel(
       tabsetPanel(type = "tab",
                   tabPanel("Data", 
                            tableOutput("fileData")),
                   tabPanel("Summary Statistics",
                            verbatimTextOutput("stats")),
                   tabPanel("Graphs"))
    )
)
)


server <- function(input, output) {

fileData <- eventReactive(input$file1,{
    read.csv(input$file1$datapath, header = TRUE, sep = ",", dec = ".", comment.char = "")
})

output$fileData <- renderTable(
    fileData()
)

vars <- reactive({
    names(fileData())
})

output$ind1 <- renderUI({
    selectInput("var1", "Independent 1", choices = vars())
})

output$ind2 <- renderUI({
    selectInput("var2", "Independent 2", choices = vars())
})

output$dep1 <- renderUI({
    selectInput("var3", "Dependent 1", choices = vars())
})

output$stats <- renderText({
    summary(aov(input$var3 ~ as.factor(input$var1) + as.factor(input$var2), data = fileData()))
})
}


shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny anova


    【解决方案1】:

    您的应用存在多个问题。

    1. 只要您的输入变量尚未初始化,即当您启动应用程序并在您选择“统计信息”之前,它们就是NULL。这就是您收到警告Warning: Error in model.frame.default: invalid type (NULL) for variable 'input$var3' 的原因。为了防止这种情况,您可以添加例如req(input$var3), ...

    2. 选择“统计”后,您的输入变量将被初始化。但是,您的输入变量只是变量的名称,即它们是字符向量。您正在尝试做的是例如aov("mpg" ~ as.factor("mpg") + as.factor("mpg"), data = mtcars)。正如您可以在 R 控制台中检查的那样,这将不起作用。要完成这项工作,您必须将输入变量转换为“符号”。我下面的方法只是将公式设置为字符串,我通过as.formula 将其转换为公式。

    3. renderText 不适用于模型输出。为此使用renderPrint

    试试这个:

      output$stats <- renderPrint({
        req(input$var1)
        req(input$var2)
        req(input$var3)
        fmla <- paste(input$var3, "~",
                      "as.factor(", input$var1, ")", "+",
                      "as.factor(", input$var2, ")")
        summary(aov(as.formula(fmla), data = fileData()))
      })
    

    【讨论】:

    • 哇,谢谢!这是完美的,现在更有意义了。它在我的应用程序中运行良好,我将来会使用它。
    猜你喜欢
    • 2018-01-20
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多