R 闪亮的应用程序读取属性名称中带有括号的数据

R shiny app reads data with parentheses in attribute name

我在使用以下应用程序时遇到问题,我的目标是分析来自输入数据集的数据,该数据集的属性名称包括括号。当我稍后尝试使用该属性时,它正在寻找具有此名称的函数。

我在基本 R 代码中没有这个问题,其中 R 用点替换括号 - Temperature.F。而不是温度(F)。但是在 R Shiny 中我找不到解决方案。

我使用这个数据集:https://www.kaggle.com/sobhanmoosavi/us-accidents

所以我的目标是显示温度 (F) 的数字图表,但是它会根据括号寻找具有该名称的函数。

library(shiny)
library(shinythemes)
library(data.table)
library(ggplot2)

not_sel <- "Not Selected"

about_page <- tabPanel(
    title = "About",
    titlePanel("About"),
    "Created with R Shiny",
    br(),
    "2021 April"
)

main_page <- tabPanel(
    title = "Analysis",
    titlePanel("Analysis"),
    sidebarLayout(
        sidebarPanel(
            title = "Inputs",
            fileInput("csv_input", "Select CSV File to Import", accept = ".csv"),
            selectInput("num_var", "Numeric Variable ", choices =  c( "Temperature(F)" = "Temperature(F)",
                                                                      "Temperature_C" = "Temperature_C",
                                                                      "Wind_Chill_F" = "Wind_Chill_F",
                                                                      "Wind_Chill_C" = "Wind_Chill_C")),
            actionButton("num_button", "Num Analysis", icon = icon("play")),
            br(),
            
            
        ),
        mainPanel(
            tabsetPanel(
                tabPanel(
                    title = "Numeric",
                    plotOutput("plot_2")
                )
            )
        )
    )
    
)

#funkcia na vytvorenie grafu pre num atributy
draw_plot_num <- function(data_input, num_var){
    ggplot(data = data_input,
           aes_string(x = num_var)) +
        geom_histogram()
}

ui <- navbarPage(
    title = "Data Analyser",
    main_page,
    about_page
)
server <- function(input, output){
    options(shiny.maxRequestSize=550*1024^2)
    
    data_input <- reactive({
        req(input$csv_input)
        fread(input$csv_input$datapath)
    })
    
    num_var <- eventReactive(input$num_button,input$num_var)
    
    plot_2 <- eventReactive(input$num_button,{
        draw_plot_num(data_input(), num_var())
    })
    
    output$plot_2 <- renderPlot(plot_2())
    
    
}



shinyApp(ui = ui, server = server)

这部分有问题:

draw_plot_num <- function(data_input, num_var){
    ggplot(data = data_input,
           aes_string(x = num_var)) +
        geom_histogram()
}

aes_string 根据文档已被软弃用,因此您应该转向一些现代方法 :).

试试这个:

draw_plot_num <- function(data_input, num_var){
  ggplot(data = data_input,
         aes(x = .data[[num_var]])) +
    geom_histogram()
}

要理解这个话题,你应该参考 Programming with dplyr,在那里你可以发现当你使用非标准评估时(比如引用列而不使用 $ 运算符或 [[) 并且列的名称作为字符串存储在变量中(如果它来自 shiny,它将是字符串),那么你需要使用 .data[[col_name]],其中 col_name 是一个包含列的变量名称为字符串(字符)。