r - 输入字符串 1 无效 UTF-8 Shiny 应用程序

标签 r utf-8 shiny

我正在尝试创建一个 Shiny 的应用程序并不断获取错误Warning: E​​rror in sub: input string 1 is invalid UTF-8,这会阻止我的selectInput显示向上。我尝试使用 utf8 包将字符串转换为有效的 UTF-8 字符串,甚至在运行应用程序之前进行了测试,以确认它们都是 UTF-8 有效 mean(utf8_valid(unique( lol_data$name)))[1] 1 但错误仍然发生。任何有关使其正常工作的帮助将不胜感激。

Shiny 应用程序代码 这是我的应用程序的代码。

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)

结果 这是我测试应用程序时得到的结果。

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

最佳答案

我找到了一个有效的解决方案,

使用mutate_if(is.character, utf8::utf8_encode)而不是mutate_if(is.character, utf8::as_utf8)准备数据时有效。

关于r - 输入字符串 1 无效 UTF-8 Shiny 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62541535/

相关文章:

c# - 将散列密码存储为 UTF8 字符串的含义?

javascript - Google Analytics for Shiny Dashboard App

r - 你如何在 R 中粘贴项目列表

php - 如何在php中将文件转换为UTF-8?

R 交互和批处理模式以及帮助浏览器

PHP mysql charset utf8问题

带弹出框/工具提示的 R Shiny valueBox

R Shiny : Download existing file

在指定的时间间隔运行 R 脚本

R提取字符串中的重复单词