Он основан на drop = TRUE
в matrix
и data.frame
df[, "mat1"] <- mat[, 1, drop = FALSE]
df
# A tibble: 5 x 2
# let mat1[,1]
# <chr> <int>
#1 a 1
#2 b 2
#3 c 3
#4 d 4
#5 e 5
Это будет повторять то же поведение, что и
df[, "mat2"] <- mat2
В обоих случаях мы присваивание matrix
непосредственно с одним столбцом вместо пинга drop
атрибутов dim
при наличии одного столбца или строки (поскольку drop = TRUE
по умолчанию - ?Extract
)
Также поведение tibble
и data.frame/matrix
отличается от drop
df[, "mat1"]
Итак, когда мы делаем присвоение tibble
, lhs
и rhs
по-прежнему остается тибблом с одним столбцом
, тогда как если это data.frame/matrix
df[, "mat1"]
, то будет vector
df <- data.frame(let = letters[1:5])
df[["mat2"]] <- as.data.frame(mat2)
str(df)
#'data.frame': 5 obs. of 2 variables:
#$ let : Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
#$ mat2:'data.frame': 5 obs. of 1 variable:
# ..$ V1: int 1 2 3 4 5
Сейчас мы проверяем то же самое в tibble
df <- tibble(let = letters[1:5])
df[["mat2"]] <- as.data.frame(mat2)
str(df)
#tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#$ let : chr [1:5] "a" "b" "c" "d" ...
# $ mat2:'data.frame': 5 obs. of 1 variable:
# ..$ V1: int [1:5] 1 2 3 4 5
В обоих случаях он возвращает data.frame
столбец 'V1', но в методе печати для tibble
он возвращает
df
# A tibble: 5 x 2
# let mat2$V1
# <chr> <int>
#1 a 1
#2 b 2
#3 c 3
#4 d 4
#5 e 5
в data.frame
это будет
df
# let V1
#1 a 1
#2 b 2
#3 c 3
#4 d 4
#5 e 5
Если мы не проверим str
в обоих случаях, это будет иметь некоторые последствия при выполнении некоторых преобразований