Исправление «Ошибка: эстетика должна иметь длину 1 или совпадать с данными (18720): цвет» - PullRequest
0 голосов
/ 25 июня 2019

Я перебираю столбцы, создаю ggplot и сохраняю ggplot в папку, которую вводит пользователь.При этом я сталкиваюсь с ошибкой, которая не имеет смысла, потому что в предыдущем коде я пытался использовать почти ту же процедуру, и ошибки не было.

Ниже приведен мой код:

library(tidyverse)

input_file_path <- readline(prompt="Enter the csv file path: ")
output_folder_name <- readline(prompt ="Enter the folder path where you want the visuals saved: ")
output_folder_name = paste(output_folder_name,'\\',sep="")

SQL_Table <- read_csv(input_file_path, col_names = TRUE, col_types = cols(plan = col_character(),
                                                                          gender = col_character(),
                                                                          marital_status = col_character(),
                                                                          accel = col_character(),
                                                                          ext = col_character(),
                                                                          infl = col_character(),
                                                                          iss_age = col_double(),
                                                                          cell = col_character(),
                                                                          dur = col_double(),
                                                                          db_perk = col_double(),
                                                                          accel_perk = col_double(),
                                                                          ext_perk = col_double()))


SQL_Table <- SQL_Table %>% mutate(attage = iss_age + dur)
SQL_Table$iss_age = as.character(SQL_Table$iss_age)

SQL_Table <-  SQL_Table %>% rename(acceleration = accel,extension = ext, inflation = infl)

ncol <- as.numeric(grep("iss_age", colnames(SQL_Table)))
ncolMinus1 <- ncol - 1
column.names <- c(colnames(SQL_Table))
for.num <- 1


for(var in SQL_Table[,1:ncolMinus1]){
SQL_Table <- SQL_Table %>%
  group_by_at(names(SQL_Table)[-grep(paste(column.names[for.num],"|db_perk|cell|accel_perk|ext_perk|attage",
                                           sep = ""), names(SQL_Table))]) %>%
  mutate(db_perk_compare = db_perk/first(db_perk))


SQL_Table %>%
  filter(iss_age == "55") %>%
  ggplot(aes(dur, db_perk_compare, color = var)) +
  geom_smooth(se = FALSE) +
  ggtitle(paste('db_perk divided by ', column.names[for.num],' group', sep = "")) +
  xlab("duration (issue age 55)") +
  ylab(paste('db_perk divided by ', column.names[for.num],"'s db_perk", sep = "")) +
  labs(color= paste(column.names[for.num],' group', sep = "")) +
  theme(plot.title = element_text(size = 30, face = "bold")) +
  ggsave(filename = (paste('db_perk divided by ', column.names[for.num],' group', '.jpg', sep = ""))
         , path = output_folder_name, width = 10, height = 8.5)

  for.num <- for.num + 1
}

Этот код выдает мне следующую ошибку:

Error: Aesthetics must be either length 1 or the same as the data (18720): colour

Я запутался, потому что этот код работает нормально:

library(tidyverse)

input_file_path <- readline(prompt="Enter the csv file path: ")
output_folder_name <- readline(prompt ="Enter the folder path where you want the visuals saved: ")
output_folder_name = paste(output_folder_name,'\\',sep="")

SQL_Table <- read_csv(input_file_path, col_names = TRUE, col_types = cols(plan = col_character(),
                                                                          gender = col_character(),
                                                                          marital_status = col_character(),
                                                                          accel = col_character(),
                                                                          ext = col_character(),
                                                                          infl = col_character(),
                                                                          iss_age = col_double(),
                                                                          cell = col_character(),
                                                                          dur = col_double(),
                                                                          db_perk = col_double(),
                                                                          accel_perk = col_double(),
                                                                          ext_perk = col_double()))

SQL_Table <- SQL_Table %>% mutate(attage = iss_age + dur)
SQL_Table$iss_age = as.character(SQL_Table$iss_age)

SQL_Table <-  SQL_Table %>% rename(acceleration = accel,extension = ext, inflation = infl)

column.names <- c(colnames(SQL_Table))
ncol <- as.numeric(grep("iss_age", colnames(SQL_Table)))




if (is.element('db_perk', column.names) == TRUE) {

  for.num <- 1

  for(var in SQL_Table[,1:ncol] ){

    SQL_Table %>%
      ggplot(aes(attage, db_perk, color = var)) +
      geom_smooth(se = FALSE) +
      ggtitle(paste('db_perk vs ', column.names[for.num],' group', sep = "")) +
      xlab("Attained Age") +
      ylab("Death Benefit Premium per $1000") +
      theme(plot.title = element_text(size = 30, face = "bold")) +
      labs(color= paste(column.names[for.num],' group', sep = "")) +
      ggsave(filename = (paste('db_perk vs ', column.names[for.num],' group', '.jpg', sep = "")), path = output_folder_name, width = 10, height = 8.5)

    for.num = for.num + 1
  }
}

Как видите, я использую color = var воба набора кода, но только верхняя часть дает мне ошибку.

Мои данные очень большие и некрасивые, но вот как это выглядит:

# A tibble: 144,000 x 14
   plan   class gender band  marital_status accel ext   infl    iss_age cell                  dur db_perk accel_perk ext_perk
   <chr>  <dbl> <chr>  <chr> <chr>          <chr> <chr> <chr>     <dbl> <chr>               <dbl>   <dbl>      <dbl>    <dbl>
 1 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     1   0.196     0.0035       NA
 2 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     2   0.231     0.0148       NA
 3 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     3   0.375     0.032        NA
 4 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     4   0.399     0.0528       NA
 5 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     5   0.451     0.0767       NA
 6 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     6   0.513     0.0997       NA
 7 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     7   0.595     0.121        NA
 8 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     8   0.678     0.145        NA
 9 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M     9   0.761     0.174        NA
10 BasicF   111 F      1a    Married        A.24  E.0   AC3.EC3      40 BasicF111F1a240C33M    10   0.844     0.207        NA
# ... with 143,990 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...