'input string 1 is invalid UTF-8 Shiny app

I am trying to create a shiny app and keep gettint the error Warning: Error in sub: input string 1 is invalid UTF-8 that prevents my selectInput from showing up. I have tried using the utf8 package to convert the strings to valid UTF-8 strings and have even tested before running the app to confirm they are all UTF-8 valid mean(utf8_valid(unique(lol_data$name)))[1] 1 and yet the error still occurs. Any help on getting this to work would be much appreciated.

Code For Shiny App This is the code for my app.

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 This is the result I get when I test the 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]

Code for preparing csv file pulled for app This is the relevant code for prepping the data that gives me the error.

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")


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source