Это просто перевод награжденного наградами ответа на пост, связанный выше, с базы lapply
/ Reduce
до purrr
map
/ reduce
.Предыдущий использованный ответ:
Reduce(cbind2, lapply(x[,-1], Matrix, sparse = TRUE))
Часть того, как это работает, заключается в том, что фреймы данных являются технически списками, поэтому вы можете использовать map
для перебора столбцов фрейма данных.В результате получаются две разреженные матрицы, по одной для каждого столбца:
library(dplyr)
library(purrr)
df <- data_frame(col1 = c(1,2,3), col2 = c(3,2,NA))
map(df, Matrix::Matrix, sparse = T)
#> $col1
#> 3 x 1 sparse Matrix of class "dgCMatrix"
#>
#> [1,] 1
#> [2,] 2
#> [3,] 3
#>
#> $col2
#> 3 x 1 sparse Matrix of class "dgCMatrix"
#>
#> [1,] 3
#> [2,] 2
#> [3,] NA
Если затем уменьшить его на cbind2
, то получится единственная разреженная матрица.
map(df, Matrix::Matrix, sparse = T) %>%
reduce(cbind2)
#> 3 x 2 sparse Matrix of class "dgCMatrix"
#>
#> [1,] 1 3
#> [2,] 2 2
#> [3,] 3 NA
Создано в 2018-10-16 пакетом представ (v0.2.1)