R - принуждает других элементов к персонажу, когда они не указаны - PullRequest
1 голос
/ 03 мая 2019

Я не могу понять это поведение Р.

a <- list("a" = 1, "b" = 2, "c" = NA, "d" = Inf)
vec <- unlist(a, use.names=FALSE)
print(vec)
[1]   1   2  NA Inf

Если в списке есть символьное значение, оно приводит все не перечисленные значения к символьному. Почему это сделано? И почему NA не приводится к символу?

a = list("a" = 1, "b" = 2, "c" = NA, "d" = Inf, "e" = "pass")
vec = unlist(a, use.names=FALSE)
print(vec)
[1] "1"    "2"    NA     "Inf"  "pass"

1 Ответ

1 голос
/ 03 мая 2019

Вот краткое описание свойств списков и векторов. Более подробную информацию можно найти в этой книге .

Вообще говоря, в R. есть две разные одномерные структуры данных.

  1. Атомные векторы: все элементы атомного вектора должны быть одного типа

  2. Списки: элементы списка могут иметь разные типы

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

Например, сочетание символа и целого числа дает символ:

str(c("a", 1))

Как видите: принуждение часто происходит автоматически.

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