Поскольку все списки являются векторами, мы можем думать об этом с точки зрения подмножества списков.Возьмем для примера:
L <- list(A = c(1, 2), B = c(1, 4))
L[[2]]
Это Extract
s второй элемент списка.Экстраполируйте это на:
df1[[2]]
Мы получаем тот же результат, что и df1[, 2]
, следовательно, identical(df1[[2]], df1[, 2])
возвращает TRUE
.Вторая часть связана со структурой tibble
, то есть:
typeof(as_tibble(df1)[[2]])
[1] "double"
typeof(as_tibble(df1[, 2]))
[1] "list"
Вторая - list
, а first
- вектор, следовательно, identical
возвращает FALSE
.
Объекты класса tbl_df имеют: (из документов)
Атрибут класса c("tbl_df", "tbl", "data.frame")
.
Базовый тип «списка»,где каждый элемент списка имеет одинаковый NROW ().
Атрибут имен, который представляет собой вектор символов той же длины, что и базовый список.
Атрибут row.names,включен для совместимости с базовым классом data.frame.Этот атрибут используется только для запроса количества строк, любые имена строк, которые могут там храниться, игнорируются большинством методов tibble.