Деньги, как известно, имеют различные функции. Одной из них является непрестанное движение денег в обращении, обслуживание процесса обращения. Без выполнения деньгами этой функции торговля была бы невозможна.

R нулевые значения: NULL, NA, NaN, Inf

  1. Получение данных от R
  2. Получение данных с SQL Server
  3. Получение данных из файлов TXT / CSV

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

В общем, R поддерживает:

NULL является объектом и возвращается, когда выражение или функция приводит к неопределенному значению. В языке R NULL (заглавные буквы) является зарезервированным словом и также может быть продуктом импорта данных с неизвестным типом данных.

NA является логической константой длины 1 и является индикатором пропущенного значения .NA (заглавные буквы) является зарезервированным словом и может быть приведен к любому другому вектору типов данных (кроме необработанного), а также может быть продуктом при импорте данных. NA и «NA» (представленные в виде строки) не являются взаимозаменяемыми. NA означает «Не доступно».

NaN обозначает Not A Number и является логическим вектором длины 1 и применяется к числовым значениям, а также к действительным и мнимым частям комплексных значений, но не к значениям целочисленного вектора. NaN - зарезервированное слово.

Inf и -Inf означают бесконечность (или отрицательную бесконечность) и являются результатом хранения большого числа или продукта, который является результатом деления на ноль. Inf является зарезервированным словом и в большинстве случаев является продуктом вычислений на языке R и, следовательно, очень редко является продуктом импорта данных. Infinite также говорит вам, что значение не пропущено и число!

Все четыре нулевых / отсутствующих типа данных имеют сопутствующие логические функции, доступные в базе R; возвращая TRUE / FALSE для каждой конкретной функции: is.null (), is.na (), is.nan (), is.infinite ().

Общее понимание всех значений, просто используя следующий код:

# чтение документации по всем типам данных:? NULL? NA? NaN? Inf # Заполняемые переменные a <- "NA" b <- "NULL" c <- NULL d <- NA e <- NaN f <- Inf ### Проверьте, совпадают ли переменные? идентичные (a, d) # [1] FALSE # NA и NaN не идентичны идентичные (d, e) # [1] FALSE ### проверка длины типов данных длина (c) # [1] 0 длина (d) # [1] 1 длина (e) # [1] 1 длина (f) # [1] 1 ### проверка типов данных str (c); класс (в); #NULL # [1] "NULL" str (d); класс (г); #logi NA # [1] "логический" str (e); класс (е); #num NaN # [1] "числовой" str (f); класс (е); #num Inf # [1] "числовой"

Получение данных от R

Обнуляемые типы данных могут иметь различное поведение при распространении, например, в список или на векторы или типы data.frame.

Мы можем проверить это, создав NULL или NA или NaN векторы и кадры данных и наблюдая за поведением:

# пустые векторы для NULL, NA и NaN v1 <- c (NULL, NULL, NULL) v2 <- NULL str (v1); класс (v1); mode (v1) str (v2); класс (v2); mode (v2) v3 <- c (NA, NA, NA) v4 <- NA str (v3); Класс (V3); mode (v3) str (v4); класс (v4); mode (v4) v5 <- c (NaN, NaN, NaN) v6 <- NaN str (v5); класс (v5); mode (v5) str (v6); класс (V6); Режим (v6)

Очевидно, что вектор NULL всегда будет пустым, независимо от того, какие элементы он может содержать. В случае NA и NaN длина элементов, которые он содержит, будет незначительно отличаться тем, что NA будет вектором класса Logical, тогда как NaN будет вектором числового класса.

NULL вектор не изменит размер, но класс в сочетании с математической операцией:

# операция с NULL Вектор v1 <- c (NULL, NULL, NULL) str (v1) # NULL v1 <- v1 + 1 str (v1) # num (0)

Это изменит только класс, но не длину, и все же любые данные не будут сохраняться в векторе.

С data.frames это относительно то же самое поведение.

#empty data.frame df1 <- data.frame (v1 = NA, v2 = NA, v3 = NA) df2 <- data.frame (v1 = NULL, v2 = NULL, v3 = NULL) df3 <- data.frame ( v1 = NaN, v2 = NaN, V3 = NaN) str (df1); ул (df2); ул (DF3)

Кадр данных, состоящий из значений NULL для каждого столбца, будет представлен как кадр данных с 0 наблюдениями и 0 переменными (0 столбцов и 0 строк). Кадр данных с NA и NaN будет состоять из 1 наблюдения и 3 переменных, логического типа данных и числового типа данных соответственно.

При добавлении новых наблюдений во фреймы данных различается поведение при работе с NULL, NA или NaN.

Добавление к «NA» data.frame:

# добавление новых строк в существующий фрейм данных df1 <- rbind (df1, data.frame (v1 = 1, v2 = 2, v3 = 3)) #explore data.frame df1

Понятно, что добавляется новая строка, и при добавлении новой строки (вектора) другого размера это приведет к ошибке, поскольку определения в кадре данных содержат измерения. Такое же поведение ожидается при работе со значением NaN. С другой стороны, разные результаты при использовании значений NULL:

# df2 получит определение измерения df2 <- rbind (df2, data.frame (v1 = 1, v2 = 2)) # это сгенерирует ошибку, поскольку определение измерения установлено в df2 <- rbind (df2, data.frame (v1 = 1, v2 = NULL)) # и с NA должно быть хорошо df2 <- rbind (df2, data.frame (v1 = 1, v2 = NA))

с первым присваиванием df2 получит определение размера, хотя первая конструкция df2 представляла собой обнуляемый вектор с тремя элементами.

NULLable также является результатом, когда мы ищем элемент вектора, который не существует, из-за того, что он выходит за границы:

l <- список (a = 1: 10, b = c ("a", "b", "c"), c = seq (0,10,0.5)) l $ a # [1] 1 2 3 4 5 6 7 8 9 10 l $ c # [1] 0,0 0,5 1,0 1,5 2,0 2,5 3,0 4,0 4,5 5,0 5,5 6,0 6,5 7,0 7,5 8,0 8,5 9,0 9,5 10,0 l $ r # NULL

мы вызываем подсписок r списка l, который является значением NULL, но не отсутствует или не существует, это NULL, что на самом деле довольно противоречиво, поскольку определение не задано. Различные результаты (не доступно) будут возвращены при вызове векторного элемента:

v <- c (1: 3) v [4] # [1] NA

Границы в списке и в векторе определяются по-разному для типов данных NA и NULL.

Получение данных с SQL Server

Я буду использовать несколько различных типов данных, полученных из следующей таблицы SQL.

ИСПОЛЬЗОВАНИЕ AzureLanding; GO CREATE TABLE R_Nullables (ID INT IDENTITY (1,1) NOT NULL, num1 FLOAT, num2 DECIMAL (20,10), num3 INT, tex1 NVARCHAR (MAX), tex2 VARCHAR (100), bin1 VARBINARY (MAX)) INSERT INTO R_Nullables SELECT 1.22, 21.535, 245, «Это текст Nvarchar», «Текст Varchar», 0x0342342 UNION ALL SELECT 3.4534, 25.5, 45, «Этот другой текст Nvarchar», «Текст Varchar 2», 0x03423e3434tg UNION ALL SELECT NULL, NULL , NULL, NULL, NULL, NULL UNION ALL SELECT 0, 0, 0, '', '', 0x

С помощью библиотеки RODBC R данные будут импортированы в среду R:

библиотека (RODBC) SQLcon <- odbcDriverConnect ('driver = {SQL Server}; сервер = TOMAZK \\ MSSQLSERVER2017; база данных = AzureLanding; trust_connection = true') # df <- sqlQuery (SQLcon, "SELECT * FROM R_Nullables") df < - sqlQuery (SQLcon, «SELECT ID, num1, num2, num3, tex1, tex2 FROM R_Nullables») закрыть (SQLcon)

При выполнении запроса SELECT * тип данных varbinary из SQL Server представляется как двоичный объект 2 ГБ в R, и, скорее всего, вы получите ошибку, поскольку R не сможет выделить память:

После изменения столбцов будет создан объект df. Презентация проста, но несколько загадочна:

ID num1 num2 num3 tex1 tex2 1 1 1.2200 21.535 245 Это текст Nvarchar Текст Varchar 2 2 3.4534 25.500 45 Этот другой текст Nvarchar Текст Varchar 2 3 3 NA NA NA <NA> <NA> 4 4 0,0000 0,000 0

При параллельном выводе SQL Server и вывода в R имеются некоторые различия: При параллельном выводе SQL Server и вывода в R имеются некоторые различия:

То, что представлено в SQL Server как значение NULL, в R представлено как NA; который является логическим типом, но не реальным NA. И только <NA> является логическим объектом, то есть недоступной информацией. Таким образом, это означает, что обработка NA касается не только «Не доступно», но и типа «Не доступно», и каждая из них требует особого внимания, в противном случае при выполнении некоторых вычислений или функций будет постоянно возникать принудительная ошибка.

Данные, импортированные с использованием SQL Server, можно использовать как обычный набор данных, импортированный в R, любым другим способом:

# выполнение некоторых элементарных вычислений df $ num1 * 2 # [1] 2,4400 6,9068 NA 0,0000 is.na (df $ num1) # [1] FALSE FALSE TRUE FALSE

Та же логика применяется к полям text1 и text2. Оба являются факторами, но значения NULL или NA могут рассматриваться соответственно.

# Text df $ text2 # NULL df $ text1 # NULL

Это довольно неожиданно, поскольку типы данных SQL Server снова не работают для среды R. Таким образом, изменив исходный запрос SQL, чтобы привести все значения:

df <- sqlQuery (SQLcon, «SELECT ID, num1, num2, num3, CAST (tex1 AS VARCHAR (100)) как text1, CAST (tex2 AS VARCHAR (100)) как text2 FROM R_Nullables»)

и повторно запустив df населения, результат df $ text1 будет:

[1] Это текст Nvarchar Это еще один текст Nvarchar <NA> Уровни: Это еще один текст Nvarchar Это текст Nvarchar

Получение данных из файлов TXT / CSV

Я создал образец файла TXT / CSV, который будет импортирован в R, выполнив:

setwd ("C: \\ Users \\ Tomaz \\") dft <- read.csv ("import_txt_R.txt") dft

Бок о бок; Файлы R и CSV покажут, что типы данных обрабатываются отлично:

но только на первый взгляд. Давайте проверим последнее наблюдение, проверив tpye:

is.na (dft [5,]) # text1 text2 val1 val2 # 5 ИСТИНА ЛОЖЬ ЛОЖЬ

Это проблема, так как фактор и значения каждого будут трактоваться по-разному, хотя оба имеют одинаковый тип, но один - реальный NA, а другой - нет.

идентичный (класс (dft [5,2]), класс (dft [5,1])) # [1] TRUE

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

Как всегда, код доступен на Github , Удачного кодирования! 🙂

NULL?
NA?
NaN?
Inf # Заполняемые переменные a <- "NA" b <- "NULL" c <- NULL d <- NA e <- NaN f <- Inf ### Проверьте, совпадают ли переменные?
Реклама
Навигация сайта
Реклама
Популярные новости
Хорошая туристическая компания

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

Шкафы недорого эконом готовые
После того, как ремонт или отделка закончена приходит время подумать и о мебели. Ну, наверно каждый человек выберет то, что он поставит в своем доме первым: диван, стол, кресло… А почему бы первым не

Финансы и бизнес
Чтобы повысить производительность и результативность бизнеса, руководителям и персоналу маркетинга, сбыта, цепочки поставок, производства необходимо понимать конкретную ситуацию, что происходит и куда

Выдача свидетельства государственной регистрации
Вот пожалуй и все, что нужно знать о документах которые Вы получите из налоговой инспекции после регистрации ООО. Процедура государственной регистрации общества с ограниченной ответственностью теперь

Виза в Китай
Виды виз в КНР определяются целью поездки и сроком их действия. В целом это классификация не отличается от перечня виз в другие государства: основными являются туристическая, деловая, учебная, рабочая

Рефинансирование ипотеки в Москве 2019
Россельхозбанк в 2018-2019 году проводит рефинансирование кредитов как своих, так и других банков: рассмотрим, процентные ставки и условия перекредитования в Россельхозбанке для физических лиц, бюджетников

Меры государственной поддержки Томской
Не для кого не секрет, что некоторые регионы нашей страны отстают в своем развитии и даже деградируют в социальном и экономическом смысле. На это есть ряд причин объективного и субъективного характера,

Курсы изучения китайского языка
Хотите получить помощь в изучении китайского языка, но не знаете кому можно доверять ? Отвечаю вам товарищи, ещё недавно я был таким же, как вы ровно до того момента, как узнал здешний адрес. Друзья,

Реклама
Облако тегов