Р: [read_delim ()] - Получив предупреждение, как от него избавиться? - PullRequest
0 голосов
/ 07 марта 2020

Я новичок в R. У меня есть код, который читает из файла без заголовков и выбирает первые два элемента из каждой строки. Каждая линия определяет маршрут самолета. Первый элемент описывает название аэропорта, откуда он взлетает, а второй элемент - имя аэропорта, откуда он приземляется.

Структура из одной из тысяч строк из файла:

LFPO;LFSL;00;AT45;210;LFPO;LFSL;189930747;150907;1815;!!!!;HOP25ZZ;HOP;0;HOP25ZZ-LFPO-LFSL-20150907180500;N;0;;;245346;;;150907;1805;0;;X;;;;;;;;;;210;;0;20150907175900;AA45458325;;;;;NEXE;NEXE;;;;;20150907180500;;;;245346;;;;;;;;;;;;;;;;;;;;;;;;;;;;HOP;;;;;;;;;;;0

Мой код состоит в том, что из всех аэропортов он входит в первую десятку на основе общего числа перемещений, которое выполняет аэропорт, и рассчитывается исходя из общего числа посадок и взлетов, которые аэропорт совершил за период времени, указанный в файл.

Код работает, и я пытаюсь улучшить его, используя лучшие библиотеки или функции. До сих пор я менял функцию read.table () на read_delim (), которая значительно улучшила время обработки. Тем не менее, я получаю несколько предупреждений, хотя печатаю желаемые результаты.

Как мне избавиться от предупреждений или как я могу отсортировать предупреждения?

Это код, а здесь ссылка на файл теста https://easyupload.io/4lw4o4:

start_time <- Sys.time()
# Libraries
library(compare)
library(janitor)
library(data.table)
library(readr)[enter image description here][1]


# START
args = commandArgs(trailingOnly=TRUE)
# test if there is at least one argument
if (length(args)==0) {
  fileName  = "traffic1week.exp2"
} else if (length(args)==1) {
  # default output file
  fileName = args[1]
}

# Convert file to dataframe
df = read_delim(fileName, delim = ";", col_names =F)

# Read file
names(df) = c("Airport","Airport")

# Retrieve 1st column
origin = df[1]# takeOff Airports
# Retrieve 2nd column
destination = df[2] # Landing Airports

# Number of movements
takeOff_airports = unlist(table(origin)) 
landing_airports = unlist(table(destination))

# Convert to dataframes
df1 = as.data.frame(takeOff_airports)
names(df1) = c('Airport', 'TakeOffs')
df2 = as.data.frame(landing_airports)
names(df2) = c('Airport', 'Landings')

# Merge both dataframes
df3 = merge(df1, df2, all=T)

# Sum colum[3] values from each dataframe
df3$Total_Movements = df3$TakeOffs+df3$Landings

# Orde by max total movements
df3 = df3[order(-df3$Total_Movements),]

# Reorganize columns
result = df3[, c(1, 4, 2, 3)]

# Print results 
print(result[1:10,], row.names = FALSE)

# STOP
end_time = Sys.time()
cat(paste("Processing time: ", end_time - start_time),sep="\n\n")

Это предупреждения:

Attaching package: ‘compare’

The following object is masked from ‘package:base’:

isTRUE


Attaching package: ‘janitor’

The following objects are masked from ‘package:stats’:

chisq.test, fisher.test

Parsed with column specification:
cols(
.default = col_logical(),
X1 = col_character(),
X2 = col_character(),
X3 = col_character(),
X4 = col_character(),
X5 = col_character(),
X6 = col_character(),
X7 = col_character(),
X8 = col_double(),
X9 = col_double(),
X10 = col_character(),
X11 = col_character(),
X12 = col_character(),
X13 = col_character(),
X14 = col_double(),
X15 = col_character(),
X16 = col_character(),
X17 = col_double(),
X20 = col_double(),
X23 = col_double(),
X24 = col_character()
# ... with 13 more columns
)
See spec(...) for full column specifications.
Warning message:
The `names` must have length 95, not 2.
This warning is displayed once per session. 
Airport Total_Movements TakeOffs Landings
LFPG            9407     4926     4481
EHAM            9399     4879     4520
LTBA            9384     4749     4635
EGLL            9057     4749     4308
EDDF            8930     4624     4306
EDDM            7535     3816     3719
LEMD            7412     3789     3623
LIRF            6957     3528     3429
LEBL            6406     3221     3185
EGKK            5995     3050     2945
Processing time:  1.78606390953064

Я хотел бы получить только:

Airport Total_Movements TakeOffs Landings
LFPG            9407     4926     4481
EHAM            9399     4879     4520
LTBA            9384     4749     4635
EGLL            9057     4749     4308
EDDF            8930     4624     4306
EDDM            7535     3816     3719
LEMD            7412     3789     3623
LIRF            6957     3528     3429
LEBL            6406     3221     3185
EGKK            5995     3050     2945
Processing time:  1.78606390953064

1 Ответ

0 голосов
/ 07 марта 2020

Предупреждение при загрузке пакетов нормальное. Они просто информативны. Существует способ подавления сообщений с помощью suppressMessages(), но если вы вообще отключите каждое сообщение в своей программе, вы можете рискнуть пропустить какое-то важное сообщение в случае исключения.

Попробуйте это

suppressMessages(library(compare))

Что касается предупреждений, выданных read_delim(), они просто информируют вас о типах классов, предполагаемых для каждого столбца, поскольку вы сами их не указали. Если вы передадите параметр colClasses в read_delim(), он перестанет болтать. Вы также можете подавить эти сообщения, поместив read_delim() внутри suppressMessage() или suppressWarnings(), как указано выше. Или, если вместо этого вы используете read.table(), он спокойно принимает разумные типы для столбцов, не отправляя сообщения об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...