x <- as.single(runif(10))
attr(x, "Csingle")
f <- function(x)attr(x, "Csingle") <- NULL
g <- function(x)setattr(x, "Csingle", NULL)
f(x)
x
g(x)
x
if (FALSE) {
# restart R
library(bit)
mysingle <- function(length = 0){
ret <- double(length)
setattr(ret, "Csingle", TRUE)
ret
}
# show that mysinge gives exactly the same result as single
identical(single(10), mysingle(10))
# look at the speedup and memory-savings of mysingle compared to single
system.time(mysingle(1e7))
memory.size(max=TRUE)
system.time(single(1e7))
memory.size(max=TRUE)
# look at the memory limits
# on my win32 machine the first line fails beause of not enough RAM, the second works
x <- single(1e8)
x <- mysingle(1e8)
# .g. performance with factors
x <- rep(factor(letters), length.out=1e7)
x[1:10]
# look how fast one can do this
system.time(setattr(x, "levels", rev(letters)))
x[1:10]
# look at the performance loss in time caused by the non-needed copying
system.time(levels(x) <- letters)
x[1:10]
# restart R
library(bit)
simplefactor <- function(n){
factor(rep(1:2, length.out=n))
}
mysimplefactor <- function(n){
ret <- rep(1:2, length.out=n)
setattr(ret, "levels", as.character(1:2))
setattr(ret, "class", "factor")
ret
}
identical(simplefactor(10), mysimplefactor(10))
system.time(x <- mysimplefactor(1e7))
memory.size(max=TRUE)
system.time(setattr(x, "levels", c("a","b")))
memory.size(max=TRUE)
x[1:4]
memory.size(max=TRUE)
rm(x)
gc()
system.time(x <- simplefactor(1e7))
memory.size(max=TRUE)
system.time(levels(x) <- c("x","y"))
memory.size(max=TRUE)
x[1:4]
memory.size(max=TRUE)
rm(x)
gc()
}
Run the code above in your browser using DataLab