R shiny basic ANOVA on imported data producing this error: Error in model.frame.default: invalid type (NULL) for variable 'input$var3'
R shiny basic ANOVA on imported data producing this error: Error in model.frame.default: invalid type (NULL) for variable 'input$var3'
我对 R 和 R shiny 非常陌生,我目前正在开发一个基本的 shinyapp,它允许用户导入数据集,然后 运行 使用 selectInputs 对数据进行方差分析以确定自变量和因变量。但是,每当我尝试执行方差分析函数时,都会收到此错误:
警告:model.frame.default 中的错误:变量 'input$var3'
的类型无效 (NULL)
我也收到了这个错误:
警告:对比错误<-:对比只能应用于具有 2 个或更多水平的因素
我不明白为什么我会收到此错误,大多数解释仅指 R 中的此错误,而不是 R shiny。同样,我是初学者,所以我的代码可能非常难看。非常感谢任何帮助!
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)
您的应用中存在多个问题。
只要您的输入变量还没有被初始化,即当您启动您的应用程序并且在您选择“统计”之前它们是 NULL
。这就是您收到警告 Warning: Error in model.frame.default: invalid type (NULL) for variable 'input$var3'
的原因。为了防止这种情况,您可以添加例如req(input$var3)
, ...
选择“统计”后,您的输入变量将被初始化。但是,您的输入变量只是变量的名称,即它们是字符向量。你正在尝试做的是例如aov("mpg" ~ as.factor("mpg") + as.factor("mpg"), data = mtcars)
。正如您可以在 R 控制台中检查的那样,这将不起作用。要完成这项工作,您必须将输入变量转换为“符号”。我下面的方法只是将公式设置为字符串,我通过 as.formula
.
将其转换为公式
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()))
})
我对 R 和 R shiny 非常陌生,我目前正在开发一个基本的 shinyapp,它允许用户导入数据集,然后 运行 使用 selectInputs 对数据进行方差分析以确定自变量和因变量。但是,每当我尝试执行方差分析函数时,都会收到此错误:
警告:model.frame.default 中的错误:变量 'input$var3'
的类型无效 (NULL)我也收到了这个错误:
警告:对比错误<-:对比只能应用于具有 2 个或更多水平的因素
我不明白为什么我会收到此错误,大多数解释仅指 R 中的此错误,而不是 R shiny。同样,我是初学者,所以我的代码可能非常难看。非常感谢任何帮助!
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)
您的应用中存在多个问题。
只要您的输入变量还没有被初始化,即当您启动您的应用程序并且在您选择“统计”之前它们是
NULL
。这就是您收到警告Warning: Error in model.frame.default: invalid type (NULL) for variable 'input$var3'
的原因。为了防止这种情况,您可以添加例如req(input$var3)
, ...选择“统计”后,您的输入变量将被初始化。但是,您的输入变量只是变量的名称,即它们是字符向量。你正在尝试做的是例如
将其转换为公式aov("mpg" ~ as.factor("mpg") + as.factor("mpg"), data = mtcars)
。正如您可以在 R 控制台中检查的那样,这将不起作用。要完成这项工作,您必须将输入变量转换为“符号”。我下面的方法只是将公式设置为字符串,我通过as.formula
.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()))
})