Я перебираю столбцы, создаю 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