as.matrix не сохраняет режим данных пустого data.frame - PullRequest
2 голосов
/ 17 марта 2012

Сегодня я нашел что-то странное, я хотел спросить вас, была ли логическая причина того, что я вижу, или вы думаете, что это ошибка, о которой следует сообщить команде R-devel:

df <- data.frame(a = 1L:10L)
class(df$a)
# [1] "integer"
m <- as.matrix(df)
class(m[, "a"])
# [1] "integer"

Пока ничего удивительного: as.matrix сохраняет режим данных, здесь "целое число". Однако с пустым (без строк) data.frame:

df <- data.frame(a = integer(0))
class(df$a)
# [1] "integer"
m <- as.matrix(df)
class(m[, "a"])
# [1] "logical"

Есть идеи, почему здесь режим меняется с "целого" на "логический"? Я использую версию 2.13.1

Спасибо.

1 Ответ

4 голосов
/ 17 марта 2012

Это из-за этой одной строки в as.matrix.data.frame:

if (any(dm == 0L)) return(array(NA, dim = dm, dimnames = dn))

В принципе, если любые измерения равны нулю, вы получаете массив "full" из NA.Я говорю «полный», потому что на самом деле нет никаких наблюдений, потому что одно из измерений равно нулю.

Причина, по которой класс logical, заключается в том, что это класс NA.Есть специальные NA для других классов, но они здесь не очень нужны.Например:

> class(NA)
[1] "logical"
> class(NA_integer_)
[1] "integer"
> class(NA_real_)
[1] "numeric"
> class(NA_complex_)
[1] "complex"
> class(NA_character_)
[1] "character"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...