我正在尝试创建一个闪亮的应用程序并不断收到错误Warning: Error in sub: input string 1 is invalid UTF-8
这阻止了我的selectInput
从出现。我尝试过使用utf8
包将字符串转换为有效的 UTF-8 字符串,甚至在运行应用程序之前进行测试以确认它们都是 UTF-8 有效的mean(utf8_valid(unique(lol_data$name)))[1] 1
但错误仍然发生。任何帮助使其发挥作用的帮助将不胜感激。
闪亮应用程序代码这是我的应用程序的代码。
setwd("")
library(shiny)
lol_data <- read_csv(paste("data/shiny/cleanedlol_data",
Sys.Date(), sep = ''))
# Define UI for application that draws a histogram
ui <- fluidPage(
titlePanel("How well will your lol draft do?"),
sidebarLayout(
sidebarPanel(
selectInput(
"player",
"select your player *required",
choices = unique(as.character(lol_data$name))
),
uiOutput("secondSelection"),
uiOutput("thirdSelection"),
uiOutput("fourthSelection"),
uiOutput("fifthSelection")
),
mainPanel(
plotOutput("histogram")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$secondSelection <- renderUI({
selectInput("opp_name", "select your opponent",
choices = unique(lol_data %>%
filter(name == input$player &
ifelse(!is.na(input$team),
lol_data$team ==
input$team,
!is.na(lol_data$team)) &
ifelse(!is.na(input$team_vs),
lol_data$team_vs ==
input$team_vs,
!is.na(team_vs)) &
ifelse(!is.na(input$role),
lol_data$role ==
input$role,
!is.na(lol_data$role))
)) %>%
pull(opp_name))
})
output$thirdSelection <- renderUI({
selectInput("team", "select your player's team",
choices = unique(lol_data%>%
filter(name == input$player &
ifelse(!is.na(input$opp_name),
lol_data$opp_name ==
input$opp_name,
!is.na(lol_data$opp_name)) &
ifelse(!is.na(input$team_vs),
lol_data$team_vs ==
input$team_vs,
!is.na(team_vs)) &
ifelse(!is.na(input$role),
lol_data$role ==
input$role,
!is.na(lol_data$role))
)) %>%
pull(team))
})
output$fourthSelection <- renderUI({
selectInput("team_vs", "select your opposing team",
choices = unique(lol_data%>%
filter(name == input$player&
ifelse(!is.na(input$opp_name),
lol_data$opp_name ==
input$opp_name,
!is.na(lol_data$opp_name) &
ifelse(!is.na(input$team),
lol_data$team ==
input$team,
!is.na(team)) &
ifelse(!is.na(input$role),
lol_data$role ==
input$role,
!is.na(lol_data$role))
)) %>%
pull(team_vs)))
})
output$fifthSelection <- renderUI({
selectInput("role", "select your player's role",
choices = unique(lol_data%>%
filter(name == input$player &
ifelse(!is.na(input$team),
lol_data$team ==
input$team,
!is.na(lol_data$team)) &
ifelse(!is.na(input$team_vs),
lol_data$team_vs ==
input$team_vs,
!is.na(team_vs)) &
ifelse(!is.na(input$opp_name),
lol_data$opp_name ==
input$opp_name,
!is.na(lol_data$opp_name))
)) %>%
pull(role))
})
output$hist <- renderPlot({
data_name <- subset(lol_data, name == input$player, opp_name = input$opp_name,
team == input$team, team_vs == input$team_vs,
role == input$role)
ggplot(data_name, aes(x = points))+
geom_histogram()
})
}
shinyApp(ui = ui, server = server)
Result这是我测试App时得到的结果。
runApp('~/test')
Warning: Missing column names filled in: 'X1' [1]
Parsed with column specification:
cols(
.default = col_double(),
name = col_character(),
link = col_character(),
champion = col_character(),
summoner_spells = col_character(),
items = col_character(),
team = col_character(),
team_vs = col_character(),
player_win = col_character(),
date_time_utc = col_datetime(format = ""),
role = col_character(),
unique_line = col_character(),
unique_game = col_character(),
unique_line_vs = col_character(),
current_year = col_logical(),
opp_name = col_character(),
opp_team = col_character(),
opp_team_vs = col_character(),
opp_player_win = col_character(),
opp_date_time_utc = col_datetime(format = ""),
opp_role = col_character()
# ... with 1 more columns
)
See spec(...) for full column specifications.
|=================================================================================================================| 100% 416 MB
Listening on http://127.0.0.1:6931
Warning: Error in sub: input string 1 is invalid UTF-8
[No stack trace available]
准备为应用程序拉取的 csv 文件的代码这是准备给我错误的数据的相关代码。
library(utf8)
if(str_detect(list.files("data/shiny/"),
paste("cleanedlol_data", Sys.Date(), sep = ""))){
lol_data <- read_csv(paste("data/shiny/cleanedlol_data",
Sys.Date(), sep = ''))
}else{
lol_data <- lol_data %>%
janitor::clean_names() %>%
mutate(lg_kll_vr_sssts = replace(lg_kll_vr_sssts,
is.infinite(lg_kll_vr_sssts),NA),
lg_kll_cs_vr_dth = replace(lg_kll_cs_vr_dth,
is.infinite(lg_kll_cs_vr_dth),NA),
lg_kls_sts_cs_vr_dth = replace(lg_kls_sts_cs_vr_dth,
is.infinite(lg_kls_sts_cs_vr_dth),NA),
lg_kls_vr_sts_cs = replace(lg_kls_vr_sts_cs,
is.infinite(lg_kls_vr_sts_cs),NA),
lg_kl_vr_sts_cs_dth = replace(lg_kl_vr_sts_cs_dth,
is.infinite(lg_kl_vr_sts_cs_dth),NA),
hist_points = points) %>%
arrange(name, date_time_utc) %>%
group_by(name) %>%
mutate(avg_points = mean(points, na.rm = TRUE)) %>%
mutate_at(c("kills", "deaths", "assists", "gold", "cs", "team_kills",
"team_gold", "hist_points", "lg_kll_vr_sssts",
"lg_kll_cs_vr_dth", "lg_kls_sts_cs_vr_dth",
"lg_kls_vr_sts_cs", "lg_kl_vr_sts_cs_dth"),
list(~rollapply(lag(.), 3,
mean, na.rm=T,
partial = F,
fill = NA,
align = "right"))) %>%
ungroup() %>%
group_by(name, current_year) %>%
mutate(current_yr_avg_pnts = mean(points, na.rm = TRUE),
current_yr_avg_kills = mean(kills, na.rm = TRUE),
current_yr_avg_deaths = mean(deaths, na.rm = TRUE),
current_yr_avg_assists = mean(assists, na.rm = TRUE),
current_yr_avg_gold = mean(gold, na.rm = TRUE),
current_yr_avg_cs = mean(cs, na.rm = TRUE),
crrnt_yr_avg_lg_kll_vr_sssts = mean(lg_kll_vr_sssts, na.rm = T),
crnt_yr_avg_lg_kll_cs_vr_dth = mean(lg_kll_cs_vr_dth, na.rm=T),
crnt_yr_lg_kls_sts_cs_vr_dth = mean(lg_kls_sts_cs_vr_dth,
na.rm=T),
crnt_yr_lg_kls_vr_sts_cs = mean(lg_kls_vr_sts_cs, na.rm=T)) %>%
ungroup() %>%
select(-trinket, -keystone_mastery, -keystone_rune, -time, -dst,
-tournament, -game_id_wiki, -game_id_riot, -time_precision,
-date_time_utc_precision) %>%
mutate_if(is.character, as_utf8) %>%
filter(complete.cases(.))
opp_data <- lol_data %>%
select(name, kills, deaths, assists, gold, cs, team_kills, team_gold, team,
team_vs, player_win, date_time_utc, role,
role_number, side, unique_line, unique_line_vs,
points,
hist_points, current_yr_avg_pnts, current_yr_avg_kills ,
current_yr_avg_deaths ,current_yr_avg_assists ,
current_yr_avg_gold , current_yr_avg_cs,
crrnt_yr_avg_lg_kll_vr_sssts, lg_kll_vr_sssts,
crnt_yr_avg_lg_kll_cs_vr_dth, lg_kll_cs_vr_dth) %>%
rename(opp_name = name, opp_kills = kills, opp_deaths = deaths,
opp_assists = assists, opp_gold = gold, opp_cs = cs,
opp_team_kills = team_kills, opp_team_gold = team_gold,
opp_team = team, opp_team_vs = team_vs,
opp_player_win = player_win,opp_date_time_utc = date_time_utc,
opp_role = role,
opp_role_number = role_number, opp_side = side,
opp_unique_line = unique_line, opp_unique_line_vs = unique_line_vs,
opp_points = points,
opp_hist_points = hist_points,
opp_current_yr_avg_pnts = current_yr_avg_pnts,
opp_current_yr_avg_kills = current_yr_avg_kills,
opp_current_yr_avg_deaths = current_yr_avg_deaths,
opp_current_yr_avg_assists = current_yr_avg_assists,
opp_current_yr_avg_gold = current_yr_avg_gold,
opp_current_yr_avg_cs = current_yr_avg_cs,
opp_crrnt_yr_avg_lg_kll_vr_sssts = crrnt_yr_avg_lg_kll_vr_sssts,
opp_lg_kll_vr_sssts = lg_kll_vr_sssts,
opp_crnt_yr_avg_lg_kll_cs_vr_dth = crnt_yr_avg_lg_kll_cs_vr_dth,
opp_lg_kll_cs_vr_dth = lg_kll_cs_vr_dth)
lol_data <- lol_data %>%
left_join(opp_data, by = c("unique_line" = "opp_unique_line_vs"))%>%
filter(complete.cases(.))
write.csv(lol_data, file = paste("data/shiny/cleanedlol_data",
Sys.Date(),
sep = ""))
}
beep("fanfare")