Description Usage Arguments Details Value See Also Examples
Create a refset - a reference to a subset of an object. When the object changes, the contents of the refset change, and when the refset is changed, the object is changed too.
1 2 3 4 | refset(x, data, ..., drop = TRUE, dyn.idx = TRUE, read.only = FALSE,
eval.env = parent.frame(), assign.env = parent.frame())
x %r% data
|
x |
name of the refset to create, as a bare name or character string |
data |
the object to refer to |
... |
indices to subset with |
drop |
passed to |
dyn.idx |
update indices dynamically |
read.only |
create a read-only refset which throws an error if assigned to |
eval.env |
environment in which |
assign.env |
environment in which the variable named by |
There are two ways to call refset. The two-argument form, e.g.
refset(myref, mydata[rows,"column"]), creates a reference to the
subset of mydata passed in the second argument.
The three-or-more argument form acts like the subset function:
the indices in ... are applied to data. If data is a
data.frame, then the indices are interpreted within it, so you can refer to
columns directly: refset(myref, mydata, a>1 & b<a,). Bare column names
must be quoted, however.
Empty arguments in ... are allowed and are treated as indexing
the whole dimension, just as in Extract.
By default, the indices in subset are updated dynamically.
For example, if you call refset(myref, mydata, x >= 3,) and then
set mydata$x <- 3, the number of rows in myref will probably
increase. To turn this behaviour off and make a reference to a "fixed"
subset of your object, use dyn.idx=FALSE.
%r% is an infix version of the two-argument form.
refset returns NULL, but the x argument
will be assigned to
in the calling environment (or in env, if it is specified).
x will have an attribute ".refset.".
Refsets are implemented using makeActiveBinding.
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 | dfr <- data.frame(a=1:4, b=1:4)
ss <- dfr[1:2,]
refset(rs, dfr[1:2,])
dfr$a <- 4:1
ss # 1:2
rs # 4:3
# same:
refset(rs, dfr, 1:2, )
# same:
rs %r% dfr[1:2,]
vec <- 1:10
refset(middle, vec[4:6])
vec[4:6] <- NA
middle
middle <- 4:6 + 100
vec
# dynamic versus static indices:
dfr <- data.frame(a=rnorm(100), b=rnorm(100))
refset(ss, dfr, a>1,)
refset(ss.static, dfr, a>1,, dyn.idx=FALSE)
nrow(ss) == nrow(ss.static)
dfr$a <- dfr$a + 2 * dfr$b
precious.data <- rnorm(100)
refset(big, precious.data, precious.data>1, read.only=TRUE)
big
## Not run:
big <- big * 2 # throws an error
## End(Not run)
# Using refset with other functions:
# dynamically updated calculated column
dfr <- data.frame(a=rnorm(10), b=rnorm(10))
refset(rs, transform(dfr, x=a+2*b+rnorm(10)))
rs
rs # different
# Non-readonly refset with other functions. Works but gives a warning:
## Not run:
vec <- 1:5
refset(ssv, names(vec), read.only=FALSE)
ssv <- LETTERS[1:5]
vec
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.