Присвоение всей матрицы столбцу data.frame создает очень странный объект. Если вы посмотрите на структуру dat
, вы увидите
'data.frame': 10 obs. of 3 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10
$ new1: int [1:10, 1] 11 12 13 14 15 16 17 18 19 20
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr "BLOB"
$ new2: int 201 202 203 204 205 206 207 208 209 210
Итак, вы добавили столбец, который по-прежнему является матрицей. И вы можете видеть, что встроенная матрица сохранила имя столбца «BLOB». Было бы безопаснее просто присвоить столбец матрицы столбцу data.frame с помощью
dat[, "new1"] <- blob[,1]
Это происходит потому, что blob
может иметь более одного столбца. Если вы назначите его только «new1», куда должны идти эти другие столбцы? Таким образом, вся матрица встраивается в столбец.
Вы можете расширить встроенные матрицы с помощью
do.call("cbind.data.frame", dat)
который сохранит имя столбца «BLOB», но теперь это будет «обычный» data.frame, поэтому «BLOB» будет указан в colnames()
Когда R печатает data.frame с внедренной матрицей, обычно он добавляет префикс имени столбца data.frame перед именами столбцов матрицы, но когда есть только один столбец, он использует только имя столбца матрицы (что, по общему признанию, может сбивать с толку). Наблюдать:
mm<-matrix(1:9+10, nrow=3, dimnames=list(NULL, c("m1","m2","m3")))
data.frame(a=1:3, b = mm, c=letters[1:3])
# a b.m1 b.m2 b.m3 c
# 1 1 11 14 17 a
# 2 2 12 15 18 b
# 3 3 13 16 19 c
data.frame(a=1:3, b = mm[,1, drop=FALSE], c=letters[1:3])
# a m1 c
# 1 1 11 a
# 2 2 12 b
# 3 3 13 c
Короче говоря: не помещайте матрицу в data.frame.
person
MrFlick
schedule
29.11.2016