Description Usage Arguments Details Value Author(s) References See Also Examples
Function setattr
sets a singe attribute and function setattributes
sets a list of attributes.
1 2 | setattr(x, which, value)
setattributes(x, attributes)
|
x |
|
which |
name of the attribute |
value |
value of the attribute, use NULL to remove this attribute |
attributes |
a named list of attribute values |
The attributes of 'x' are changed in place without copying x. function setattributes
does only change the named attributes, it does not delete the non-names attributes like attributes
does.
invisible(), we do not return the changed object to remind you of the fact that this function is called for its side-effect of changing its input object.
Jens Oehlschlägel
Writing R extensions – System and foreign language interfaces – Handling R objects in C – Attributes (Version 2.11.1 (2010-06-03 ) R Development)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 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
## Not run:
# 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()
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.