Есть ли общая проблема с печатью data.frame
, когда у нее есть столбец списка объектов S4? Или мне просто не повезло?печать data.frame, который содержит столбец списка объектов S4
Я столкнулся с этим с объектами из пакета git2r
, но сопровождающий Стефан Видгрен указывает на этот пример от Matrix
. Я отмечаю, что объект можно распечатать, если он отправлен через dplyr::tbl_df()
. Я согласен с тем, что печать не предоставляет много информации о объектах S4;
все прошу не погрешность
.
ОБНОВЛЕНО с чуть более высокими амбициями: можно сохранить качество data.frame
-like?
library(Matrix)
library(dplyr)
m <- new("dgCMatrix")
isS4(m)
#> [1] TRUE
df <- data.frame(id = 1:2)
df$matrices <- list(m, m)
df
#> Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, : first argument must be atomic
tbl_df(df)
#> Source: local data frame [2 x 2]
#>
#> id
#> (int)
#> 1 1
#> 2 2
#> Variables not shown: matrices (list).
## force dplyr to show the tricky column
tbl_df(select(df, matrices))
#> Source: local data frame [2 x 1]
#>
#> matrices
#> (list)
#> 1 <S4:dgCMatrix, CsparseMatrix, dsparseMatrix, generalMatrix, dCsparseMatrix,
#> 2 <S4:dgCMatrix, CsparseMatrix, dsparseMatrix, generalMatrix, dCsparseMatrix,
## rawr points out that this does not error ... but loses the df quality
print.default(df)
#> $id
#> [1] 1 2
#>
#> $matrices
#> $matrices[[1]]
#> 0 x 0 sparse Matrix of class "dgCMatrix"
#> <0 x 0 matrix>
#>
#> $matrices[[2]]
#> 0 x 0 sparse Matrix of class "dgCMatrix"
#> <0 x 0 matrix>
#>
#>
#> attr(,"class")
#> [1] "data.frame"
Я бы не назвал, что «обходной путь». Это разрушает элементы во втором столбце для совершенно другого класса. Столбцы данных не должны содержать списки. Я подозреваю, что они также должны содержать конструкторы S4. Классические отказоустойчивые усилия включают в себя POSIXlt классифицированные векторы. Я знаю, что они не должны содержать языковые объекты, такие как функции или выражения R. Я думаю, вы должны отказаться от данных в качестве цели и использовать другой контейнерный класс. –