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
是一个包含列的变量名称为字符串(字符)。
我在使用以下应用程序时遇到问题,我的目标是分析来自输入数据集的数据,该数据集的属性名称包括括号。当我稍后尝试使用该属性时,它正在寻找具有此名称的函数。
我在基本 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
是一个包含列的变量名称为字符串(字符)。