Update
read.csv, strsplit splitstackshape:::numMat:
M <- strsplit(L, "\\s+|:")
cbind(mol = as.numeric(sapply(M, `[`, 1)),
splitstackshape:::numMat(lapply(M, `[`, -1), fill=0))
2:
....
:
L <- c("1 1:1 2:1 3:1 5:1 6:1 8:1",
"5 1:1 2:1 4:1",
"9 1:1 2:1 7:1 10:1")
M <- replicate(10000, L)
@thelatemail :
fun1 <- function() {
spl <- lapply(strsplit(M,"\\s+|:.? |:.$"),as.numeric)
vals <- lapply(spl,"[",-1)
data.frame(
mol=sapply(spl,"[",1),
t(sapply(vals, function(x) {
out <- rep(0,max(unlist(vals)))
out[x] <- 1
out} ))
)
}
system.time(out_late <- fun1())
head(out_late)
:
library(splitstackshape)
fun2 <- function() {
M <- strsplit(M, "\\s+|:")
cbind(mol = as.numeric(sapply(M, `[`, 1)),
splitstackshape:::numMat(lapply(M, `[`, -1), fill=0))
}
system.time(out_ananda <- fun2())
head(out_ananda)
@ . , , "val".
fun3 <- function() {
t(sapply(strsplit(M, "\\s+"), function(l) {
mol <- as.numeric(l[1])
names(mol) <- 'mol'
val <- numeric(10)
names(val) <- 1:10
for (x in strsplit(l[-1], ":"))
val[x[1]] <- as.numeric(x[2])
c(mol, val)
}))
}
system.time(out_matthew <- fun3())
head(out_matthew)