Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(data.table)
- library(Matrix)
- library(pipeR)
- DT <- data.table(a = c(0,1,0), b = 0:2) %>>% `[`( , lapply(.SD, as.numeric))
- sparseMat <- DT %>>% `[`( , rn := .I) %>>% melt.data.table(id.var = "rn") %>>% `[`(value != 0) %>>%
- `[`( , cn := match(variable, names(DT))) %>>% {
- sparseMatrix(.$rn, .$cn, x = .$value)
- }
- # benchmark
- library(microbenchmark)
- N <- 3e4
- p <- 200
- microbenchmark(op1 = {matrix(rpois(N*p, 2), N) %>>% data.table %>>% as.matrix %>>% as("CsparseMatrix")},
- op2 = {matrix(rpois(N*p, 2), N) %>>% data.table %>>% (~tmp <- names(.)) %>>%
- `[`( , rn := .I) %>>% melt.data.table(id.var = "rn") %>>% `[`(value != 0) %>>%
- `[`( , cn := match(variable, tmp)) %>>% {
- sparseMatrix(.$rn, .$cn, x = .$value)
- }}, times = 20L)
- # Unit: milliseconds
- # expr min lq mean median uq max neval
- # op1 312.6052 333.5377 411.8370 445.4457 448.6806 551.1241 20
- # op2 735.5928 910.1411 953.2906 968.4100 1028.0968 1087.8577 20
Advertisement
Add Comment
Please, Sign In to add comment