Інтерпретація помилок у r: 'max' незначний для факторів


У той чи інший момент ви можете зіткнутися з такою помилкою в R:

 'max' not meaningful for factors

Це просто означає, що ви намагаєтеся взяти “max” змінної, яка належить фактору класу.

Наприклад, ця помилка генерується, якщо ми намагаємося взяти максимум із наступного вектора:

 #create a vector of class vector
factor_vector <- as.factor(c(1, 7, 12, 14, 15))

#attempt to find max value in the vector
max(factor_vector)

#Error in Summary.factor(1:5, na.rm = FALSE): 
# 'max' not meaningful for factors

За визначенням, значення факторного вектора належать до номінального класу, що означає відсутність значущого порядку значень. Тому немає «максимального» значення для пошуку.

Просте рішення для знаходження максимуму факторного вектора полягає в тому, щоб просто перетворити його на символьний вектор, а потім на числовий вектор:

 #convert factor vector to numeric vector and find the max value
new_vector <- as.numeric(as.character(factor_vector))
max(new_vector)

#[1] 15

Якщо ваш фактор-вектор просто містить назви факторів, тоді неможливо знайти максимальне значення, навіть після перетворення фактор-вектора на числовий вектор, оскільки немає сенсу знаходити “максимум” списку факторів. імена.

 #create factor vector with names of factors
factor_vector <- as.factor(c("first", "second", "third"))

#attempt to convert factor vector into numeric vector and find max value
new_vector <- as.numeric(as.character(factor_vector))
max(new_vector)

#Warning message:
#NAs introduced by coercion 
#[1] NA

Слід зазначити, що R може знайти максимальну кількість векторів, векторів дат і векторів символів без проблем:

 numeric_vector <- c(1, 2, 12, 14)
max(numeric_vector)

#[1] 14

character_vector <- c("a", "b", "f")
max(character_vector)

#[1] “f”

date_vector <- as.Date(c("2019-01-01", "2019-03-05", "2019-03-04"))
max(date_vector)

#[1] "2019-03-05"

Отже, якщо ви намагаєтеся знайти максимальне значення у векторі, просто переконайтеся, що ваш вектор не має типу factor .

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *